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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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