gpt4 book ai didi

c - 没有从文件中获取 token ?

转载 作者:行者123 更新时间:2023-11-30 19:22:54 27 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

8年前关闭。




Improve this question




我正在尝试从文件中读取连续的行,并通过指向字符串数组的指针指向它们。但只有第一行按预期输出,之后输出未按预期显示。

input.txt:
Hi i am Michel
hello swing
how are you

o/p 是:
LINE[1]=Hi i am Michel
st_arr[0]=Hi
st_arr[1]=i
st_arr[2]=am
st_arr[3]=Michel

LINE[2]=hello swing
st_arr[0]=Hi
LINE[3]=how are you
st_arr[0]=Hi

这是我的代码:
main()
{
int i = 0,j=0,k=0,p=0;
char lines[10][ 50];
char words[10];
char *st_arr[20];
FILE *fp = fopen("input.txt", "r");
while (fgets(lines[i], sizeof(lines[i]), fp))
{
lines[i][strlen(lines[i])-1] = '\0';
i = i + 1;
}
fclose(fp);
printf("The value of i=%d\n",i);
for(j=0;j<i;j++)
{
printf("LINE[%d]=%s\n",j+1,lines[j]);
{
char *token=strtok(lines," ");
while(token!=NULL)
{
st_arr[p]=malloc(strlen(token)+1);
strcpy(st_arr[p],token);
printf("\tst_arr[%d]=%s\n",p,token);
token=strtok(NULL," ");
p++;
}
}

bzero(st_arr[j],sizeof(st_arr));
p=0;

}
}

有什么我明显遗漏的问题吗?

最佳答案

看起来像这条线:

bzero(st_arr[j],sizeof(st_arr));

是超出堆栈的缓冲区溢出,清除部分“行”缓冲区。

更不用说通过 bzero 删除 st_arr 中的这些分配所造成的内存泄漏:
st_arr[p]=malloc(strlen(token)+1);

另一个错误是您在从文件读取的每个字符串之间填充空值,然后您从第一个字符串中读取:
 char *token=strtok(lines," ");

这只会标记第一个空值,因此会丢失所有后续字符串。你的意思可能是:
 char *token=strtok(lines[j]," ");

关于c - 没有从文件中获取 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com