Avatar billede skeleton Nybegynder
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
Avatar billede conrad Nybegynder
30. november 2003 - 01:34 #1
måske ved strcpy

#include <string.h>    char *strcpy  (      char        *dst,      const char  *src);
Avatar billede bertelbrander Novice
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);
Avatar billede arne_v Ekspert
30. november 2003 - 10:01 #3
tekst data => strcpy
binære data => memcpy
(og så kan du ikke bruge 1 og 2som variabel navne)
Avatar billede skeleton Nybegynder
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);
Avatar billede arne_v Ekspert
30. november 2003 - 19:19 #5
Du kalder med:

strcpy(d_from,p_from);

uden *.

(de er kun i erklæringen)
Avatar billede skeleton Nybegynder
30. november 2003 - 20:19 #6
når jeg kører mit program med de nye ændringer:

Segmentation fault
Avatar billede arne_v Ekspert
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.
Avatar billede skeleton Nybegynder
30. november 2003 - 20:32 #8
okay, tester lige med det samme.
Avatar billede skeleton Nybegynder
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);
Avatar billede arne_v Ekspert
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)
Avatar billede skeleton Nybegynder
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.
Avatar billede arne_v Ekspert
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);

?
Avatar billede skeleton Nybegynder
30. november 2003 - 21:07 #13
d_from=(nil) p_from=0xbfff8810
d_from=(null) p_from=
Segmentation fault
Avatar billede skeleton Nybegynder
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)
Avatar billede arne_v Ekspert
30. november 2003 - 21:13 #15
Hvis d_from er NULL så kan du ikke strcpy til den.
Avatar billede arne_v Ekspert
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.
Avatar billede skeleton Nybegynder
30. november 2003 - 21:14 #17
hvordan kan jeg så får værdierne fra p_from, p_subject, p_date
Avatar billede arne_v Ekspert
30. november 2003 - 21:32 #18
Jeg tror at du skal flytte strcpy (eller måske strncpy) over i den
koder læser linien.
Avatar billede skeleton Nybegynder
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:
Avatar billede skeleton Nybegynder
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.
Avatar billede arne_v Ekspert
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.
Avatar billede skeleton Nybegynder
30. november 2003 - 21:58 #22
så røg \n væk
men stadig error3
Avatar billede skeleton Nybegynder
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;
}
Avatar billede skeleton Nybegynder
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]#
Avatar billede arne_v Ekspert
30. november 2003 - 22:01 #25
Er e_date en VARCHAR ?

Hvis det er en DATE type så skal den nok formateres abderledes.
Avatar billede skeleton Nybegynder
30. november 2003 - 22:21 #26
e_date er en varchar
Avatar billede skeleton Nybegynder
30. november 2003 - 22:30 #27
det spøjse er at der kun printes
MySQL error3:
og ikke selve fejl koden .., mysql_error(handle));
Avatar billede arne_v Ekspert
30. november 2003 - 22:33 #28
Har du checket om data bliver indsat ?
Avatar billede skeleton Nybegynder
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.
Avatar billede arne_v Ekspert
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 ?
Avatar billede skeleton Nybegynder
30. november 2003 - 23:13 #31
ja mine data kommer ind i DB
Avatar billede arne_v Ekspert
30. november 2003 - 23:15 #32
Hm.

Overvej evt. at droppe den if.
Avatar billede skeleton Nybegynder
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.
Avatar billede arne_v Ekspert
30. november 2003 - 23:21 #34
Tja...

Så godt kender jeg heller ikke MySQL C API.
Avatar billede skeleton Nybegynder
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.
Avatar billede arne_v Ekspert
30. november 2003 - 23:30 #36
svar
Avatar billede arne_v Ekspert
30. november 2003 - 23:30 #37
433573 har jeg fået point for
Avatar billede arne_v Ekspert
30. november 2003 - 23:30 #38
Ifølge min kone ved at bruge sygeligt meget tid foran computeren !

:-)
Avatar billede arne_v Ekspert
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 ?
Avatar billede skeleton Nybegynder
30. november 2003 - 23:46 #40
Vil lige prøve den af.
Avatar billede skeleton Nybegynder
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.
Avatar billede arne_v Ekspert
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.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester