значение массива над записью - PullRequest
0 голосов
/ 15 июня 2011

Привет всем, я сталкиваюсь со странной проблемой, я мой код, я читаю значения из файла, а в файле есть строки и столбцы, я храню второй столбец в моем массиве

но проблема в том, что когда я впервые копирую в моей позиции шифрование [0] = токен

я хорошо работаю, когда сохраняю при шифровании позиции [1] мое значение шифрования [0] перезаписывается с помощью и становится таким же, как шифрование [1], снова при шифровании третьего цикла [0], шифрование [1] становится таким же, как шифрование [2], так что в итоге все значения становятся последними записанными значениями

вот мой код, помоги мне по-королевски

#include<stdio.h>
#include <sys/stat.h>
#include<time.h>
#include<string.h>
void main()
{    
    FILE * f1 =  fopen("2.19.18.110_202.142.175.104.csv" , "r");
    if(f1==NULL)
    {
      printf("not open");    
    }
    char ch;
    int row =0;
    int col=0;
    while(ch!=EOF)
    {
        ch = fgetc(f1);
        if(ch=='\n')
            row++;
        if(ch==' ')
            col++;
    }
    fclose(f1);
    int b=0;
    int gg=0;
    //for( b=0;b<row;b++)
    char * encryption[row];
    char  payload[col*10];
    FILE * f2 =  fopen("2.19.18.110_202.142.175.104.csv" , "r");

    while( fgets ( payload, sizeof payload, f2)!=NULL)
    {
        int col1=0;
        printf("b= %d\t" , b);
        //  fgets ( payload, sizeof payload, f2);
        fputs(payload ,stdout);
        printf("\n\n");
        char *token;

        token = strtok(payload, " ");
        token = strtok(NULL, " ");  
        encryption[gg] = token;
        printf("token %s\n" ,token);   
        gg=gg+1;    

        printf("encryption %s\n" ,encryption[0]);    
        printf("encryption %s\n" ,encryption[1]);    
        printf("encryption %s\n" ,encryption[2]);    
        printf("encryption %s\n" ,encryption[3]);


        token = strtok(NULL, " "); 
        while ( token != NULL)
        {
          token = strtok(NULL, " ");
        }
    }
}

1 Ответ

4 голосов
/ 15 июня 2011

encryption[] - это просто массив указателей - для каждого элемента вам нужно malloc() достаточное количество памяти (strlen(token) + 1 байт), а затем использовать strcpy() для копирования содержимого строки из token в encryption[gg].

Изменить:

token = strtok(NULL, " ");  
encryption[gg] = token;

на:

token = strtok(NULL, " ");  
encryption[gg] = malloc(strlen(token) + 1);
strcpy(encryption[gg], token);

Не забудьте free() каждый элемент encryption позже, когда вы закончите, иначевы потеряете память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...