数组值超过写入

时间:2011-06-15 14:37:16

标签: c linux gcc

你好每一个我面临一个奇怪的问题我的代码我正在读取文件中的值和文件有行和列我存储我的数组中的第二列

但问题是我第一次在我的位置复制加密[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 个答案:

答案 0 :(得分:4)

encryption[]只是一个指针数组 - 对于每个元素,您需要malloc()足够的内存(strlen(token) + 1字节),然后使用strcpy()复制字符串内容tokenencryption[gg]

变化:

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

为:

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

当你完成后,不要忘记free() encryption的每个元素,否则你会泄漏内存。