30. november 2003 - 01:27
Der er
41 kommentarer og 1 løsning
char *1 til char 2[]
Hej E Hvordan smider man 1 over i 2 char *1; char 2[10000]; har et program hvor jeg smider noget data ind i 1 og skal der efter have det over i 2
Annonceindlæg fra Salesforce
30. november 2003 - 01:34
#1
måske ved strcpy #include <string.h> char *strcpy ( char *dst, const char *src);
30. november 2003 - 01:55
#2
Hvis det er data og ikke en nul-termineret streng kan man med fordel bruge: #include <string.h> void *memcpy(void *out, const void *in, size_t n);
30. november 2003 - 10:01
#3
tekst data => strcpy binære data => memcpy (og så kan du ikke bruge 1 og 2som variabel navne)
30. november 2003 - 18:16
#4
kan ikke rigtig få det til at funge. int main(){ char *p_from; char d_from[100]; ... fylder p_from med data. ... char *strcpy(*d_from, *p_from);
30. november 2003 - 19:19
#5
Du kalder med: strcpy(d_from,p_from); uden *. (de er kun i erklæringen)
30. november 2003 - 20:19
#6
når jeg kører mit program med de nye ændringer: Segmentation fault
30. november 2003 - 20:23
#7
Det lyder mere som en uinitialiseret pointer eller en buffer der er for lille eller noget i den stil. Du bliver nødt til at finde ud af hvor det går galt med nogle printf sætninger.
30. november 2003 - 20:32
#8
okay, tester lige med det samme.
30. november 2003 - 20:36
#9
char *p_from, *p_subject, *p_date; char d_from[1000] = "fro_test"; char d_subject[1000] = "sub_test"; char d_date[1000] = "dat_test"; .. .. strcpy(d_from, p_from); strcpy(d_subject, p_subject); strcpy(d_date, p_date);
30. november 2003 - 20:40
#10
Hov - det er da vist galt. Du giver d_from en værdi. p_from er NULL. Og så kopierer du fra P-from til d_from !? (ja strcpy kopierer fra højre mod venstre)
30. november 2003 - 20:54
#11
p_from bliver fyldt i mellem tiden
http://www.eksperten.dk/spm/433573 har lige prøvet at
char d_from[1000];
char d_subject[1000];
char d_date[1000];
stadig segmentation fejl.
30. november 2003 - 20:56
#12
Hvad giver: printf("d_from=%p p_from=%p\n",p_from,d_from); printf("d_from=%s p_from=%s\n",p_from,d_from); strcpy(d_from, p_from); printf("d_from=%s p_from=%s\n",p_from,d_from); ?
30. november 2003 - 21:07
#13
d_from=(nil) p_from=0xbfff8810 d_from=(null) p_from= Segmentation fault
30. november 2003 - 21:12
#14
min p_from har en værdi inde i if(p_from != NULL) { p_from += strlen(from); printf("p_from i if: %s",p_from); } printf("p_from uden if: %s",p_from); men ikke uden for p_from i if: me@me.me p_from uden if: (null)
30. november 2003 - 21:13
#15
Hvis d_from er NULL så kan du ikke strcpy til den.
30. november 2003 - 21:14
#16
Hov det er mig som er en spade. Jeg byttede om på d_frpm o p_from i de printf. Det er p_from som er NULL.
30. november 2003 - 21:14
#17
hvordan kan jeg så får værdierne fra p_from, p_subject, p_date
30. november 2003 - 21:32
#18
Jeg tror at du skal flytte strcpy (eller måske strncpy) over i den koder læser linien.
30. november 2003 - 21:43
#19
så virker strcpy. men stadig samme fejl med insert into email(e_from, e_subject, e_date) values('me@me.me ', 'Test hallo l l l l ', '12-10-03 ')MySQL error3:
30. november 2003 - 21:45
#20
kan det evt. have noget at gøre med at der er newline i slutningen af hver linie. for det som jeg får ud i konsolen er jo netop at den skifter til newline umidlbart efter hver værdi.
30. november 2003 - 21:48
#21
Det kunne det måske godt. if(x[strlen(x)-1]=='\n') x[strlen(x)-1]='\0'; er ofte god.
30. november 2003 - 21:58
#22
så røg \n væk men stadig error3
30. november 2003 - 21:59
#23
/* Include Headers */ #include <stdio.h> #include <string.h> #include <unistd.h> #include "mysql.h" #include <stdlib.h> #define linsize 10000 /* Program START */ int main () { /* Program Variables */ char inlin[linsize]; char from[] = "From: ", subject[] = "Subject: ", date[] = "Date: "; char *p_from, *p_subject, *p_date; /* MySQL Variables */ MYSQL *handle; char sqlcmd[10000]; char d_from[1000]; char d_subject[1000]; char d_date[1000]; handle= mysql_init(NULL); if(isatty(fileno(stdin))){ printf("You must \"PIPE\" a file to the program. Contact admin for instructions.\n"); return 1; } /* Read %textfile% line by line*/ while (!feof(stdin)) { fgets(inlin, linsize, stdin); /* Copy the rest of the line to variabel if found */ p_from = strstr(inlin,from); p_subject = strstr(inlin,subject); p_date = strstr(inlin,date); /* IF "From: " found */ if(p_from != NULL) { if(p_from[strlen(p_from)-1]=='\n') { p_from[strlen(p_from)-1]='\0'; } p_from += strlen(from); strcpy(d_from, p_from); // printf("\np_from i if:%s",p_from); } /* IF "Subject: " found */ if(p_subject != NULL) { if(p_subject[strlen(p_subject)-1]=='\n') { p_subject[strlen(p_subject)-1]='\0'; } p_subject += strlen(subject); strcpy(d_subject, p_subject); } /* IF "Date: " found */ if(p_date != NULL) { if(p_date[strlen(p_date)-1]=='\n') { p_date[strlen(p_date)-1]='\0'; } p_date += strlen(date); strcpy(d_date, p_date); } } /* Init connection to MySQL Database */ if(handle == NULL) { printf("MySQL error1: %s", mysql_error(handle)); exit(1); } /* Make connection to MySQL Database */ if(!mysql_real_connect(handle, "localhost", "root", "", "incident", 0, NULL, 0)) { printf("MySQL error2: %s", mysql_error(handle)); exit(1); } /* Insert data in email.incident in Mysql Database */ sprintf(sqlcmd,"insert into email(e_from, e_subject, e_date) values('%s', '%s', '%s')",d_from,d_subject,d_date); if(!mysql_query(handle, sqlcmd)) { printf(sqlcmd); printf("MySQL error3: %s", mysql_error(handle)); } /* Close connection to MySQL Database */ mysql_close(handle); return 0; }
30. november 2003 - 22:00
#24
insert into email(e_from, e_subject, e_date) values('me@me.me', 'Test hallo l l l l', '12-10-03')MySQL error3: [root@dell c]#
30. november 2003 - 22:01
#25
Er e_date en VARCHAR ? Hvis det er en DATE type så skal den nok formateres abderledes.
30. november 2003 - 22:21
#26
e_date er en varchar
30. november 2003 - 22:30
#27
det spøjse er at der kun printes MySQL error3: og ikke selve fejl koden .., mysql_error(handle));
30. november 2003 - 22:33
#28
Har du checket om data bliver indsat ?
30. november 2003 - 22:36
#29
Hele koden bliver eksekveret. også /* Close connection to MySQL Database */ mysql_close(handle); return 0; } har testet med printf jeg kan bare ikke forstå hvorfor jeg ryger ind i if(!mysql_query(handle, sqlcmd)) { det skulle jo kun ske hvis det ikke er muligt at indsætte datene.
30. november 2003 - 22:38
#30
Selvfølgelig kører den videre - der er jo ikke nogen exit i den if. Men er data faktisk i databasen, hvis du laver en SELECT fra tabellen ?
30. november 2003 - 23:13
#31
ja mine data kommer ind i DB
30. november 2003 - 23:15
#32
Hm. Overvej evt. at droppe den if.
30. november 2003 - 23:19
#33
ja det bliver jeg jo nød til når jeg ikke kan forklare den. men det giver ingen mening når mysql_query(handle, sqlcmd) ikke giver en fejl.
30. november 2003 - 23:21
#34
Tja... Så godt kender jeg heller ikke MySQL C API.
30. november 2003 - 23:27
#35
Nåå det ved jeg nu ikke du har da efterhånden lavet det meste af mit prog.
smid et svar her og
http://www.eksperten.dk/spm/433573 så lukker jeg spg.
takker igen mange gange.
hvordan får man egentlig tid til at hjælpe alle og noob's.
30. november 2003 - 23:30
#36
svar
30. november 2003 - 23:30
#37
433573 har jeg fået point for
30. november 2003 - 23:30
#38
Ifølge min kone ved at bruge sygeligt meget tid foran computeren ! :-)
30. november 2003 - 23:34
#39
Jeg fandt lige: mysql_affected_rows SYNOPSIS: int mysql_affected_rows(MYSQL *mysql) DESCRIPTION: Retrieves the number of rows affected by the last UPDATE, DELETE or INSERT. RETURN VALUE: * An integer >0 indicating the number of changed/retrieved rows. * Zero if no records matched the WHERE clause in an UPDATE or DELETE. * -1 if the query returned an error, for example and attempt was made to add a duplicate primary key during an INSERT. EXAMPLE: mysql_query( &mysql, "INSERT INTO gl_transact (acctnbr, amount) VALUES (12345, 651.30)" ); if ( mysql_affected_rows( &mysql ) < 0 ) fprintf( stderr, "Attempted to add duplicate primary key\n" ); Måske brugbart for dig ?
30. november 2003 - 23:46
#40
Vil lige prøve den af.
30. november 2003 - 23:50
#41
sprintf(sqlcmd,"insert into email(e_from, e_subject, e_date) values('%s', '%s', '%s')",d_from,d_subject,d_date); mysql_query(handle, sqlcmd); if ( mysql_affected_rows( handle ) < 0 ) { fprintf( stderr, "Attempted to add duplicate primary key\n" ); } den løkke ryger jeg ikke ind i så det må være kun 1 row jeg roder med. kan iøvrigt også kun se 1 row tilføjet når jeg kører mit program.
01. december 2003 - 00:01
#42
INSERT vil altid være enten 1 row eller fejl. UPDATE og DELETE kan være mere end 1 row.
Kurser inden for grundlæggende programmering