如何解决数组值覆盖
| 你好,每个人我都面临一个奇怪的问题,我的代码我正在从文件中读取值,并且文件具有行和列,我将第二列存储在数组中 但问题是,当我第一次复制位置加密时,加密[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,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,\" \");
}
}
}
解决方法
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);
完成操作后,别忘了在encryption
的每个元素上ѭ9,否则会泄漏内存。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。