C 数组值超写

C 数组值超写,c,linux,gcc,C,Linux,Gcc,大家好,我遇到了一个奇怪的问题我的代码我从文件中读取值,文件有行和列我在数组中存储第二列 但问题是,当我第一次在我的位置复制加密[0]=令牌时 当我在位置encryption[1]存储我的encryption[0]值并与encryption[1]相同时,我工作正常。在第三个循环encryption[0]中,encryption[1]与encryption[2]相同,因此最终所有值都成为最后排序的值 这是我的密码,请帮帮我 #include<stdio.h> #include <

大家好,我遇到了一个奇怪的问题我的代码我从文件中读取值,文件有行和列我在数组中存储第二列

但问题是,当我第一次在我的位置复制加密[0]=令牌时

当我在位置encryption[1]存储我的encryption[0]值并与encryption[1]相同时,我工作正常。在第三个循环encryption[0]中,encryption[1]与encryption[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, " ");
        }
    }
}
#包括
#包括
#包括
#包括
void main()
{    
文件*f1=fopen(“2.19.18.110_202.142.175.104.csv”,“r”);
如果(f1==NULL)
{
printf(“未打开”);
}
char ch;
int行=0;
int col=0;
while(ch!=EOF)
{
ch=fgetc(f1);
如果(ch='\n')
行++;
如果(ch='')
col++;
}
fclose(f1);
int b=0;
int-gg=0;

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

更改:

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


别忘了
free()
加密的每一个元素
稍后完成后,否则你会泄漏内存。

好的,先生,谢谢你能告诉我使用malloc的意思吗……?你的代码格式很难看,所以我的大脑拒绝帮你;下次看预览。还有,为什么你要在示例中保留注释代码?你的代码很漂亮这是一个非常好的位置。缩进非常可怕,变量名毫无意义…@ThiefMaster:我至少修复了索引,但因为我还没有编辑权限,它正在等待社区在某些管道中达成协议:/Sajid应该有机会格式化他自己的代码。先生,要释放内存,我有2个写自由吗(加密)?@sajid:不,如果您分别
malloc
每个元素,那么您需要分别
free
每个元素,例如(i=0;i<10;+++i)free(加密[i]);
token = strtok(NULL, " ");  
encryption[gg] = malloc(strlen(token) + 1);
strcpy(encryption[gg], token);