【发布时间】:2019-03-15 17:01:08
【问题描述】:
所以我使用 fgets 从文件中获取字符串,然后将它们添加到数组中。但在我将它们添加到数组之前,我想去掉“\n”。这就是我用的那个
strtok(str,"\n");
array[i] = strdup(str);
数组初始化于 char *array[32];
现在功能完美运行,我可以使用数组和我不想使用的元素。但是,每当我尝试打印元素时,它都无法正常工作。
例如array[i] = hello
printf("%s:TEST",array[i]);
将打印
:TEST
但是
printf("%s\n:TEST",array[i]);
将打印
hello
:TEST
我需要它在同一行,所以我不能使用 \n,而且很奇怪它只在后面有新行时才会打印。
编辑:不是 strdup(strok) 而是 strdup(str)
编辑: 完整代码示例:
char *array[32]
char holder[32]
FILE *fp = fopen("file.txt","r");
int i = 0;
while(fgets(holder, 100, fp)){
strtok(holder,"\n");
array[i] = strdup(holder);
i++;
}
fclose(fp);
printf("word: %s",words[1]);
array[i] 不会打印,除非它后面有一个 '\n',如上所述
编辑:添加打印功能 文本文件格式
string1
string2
string3
【问题讨论】:
-
strdup(strok)- 嗯?strtok是一个函数。请显示minimal reproducible example。 -
@RichardChambers 是的,但所描述的行为是关于具有
printf的 部分 输出 -
@RichardChambers 缺少的部分是 before
":TEST"所以它不可能是缓冲区刷新问题。 -
如果没有 MCVE,那就是猜测。也许字符串包含一个 CR(回车),因此第一部分被覆盖,而没有输出 LF(换行符,换行符)。函数
strtok正在寻找'\n',但假设字符串包含'\r'。尝试打印字符串中每个字符的值(使用%d格式规范)。 -
一个minimal reproducible example 价值数百字。无论如何,如果没有它,您的问题就会结束。所以,请不要再浪费我们和您的时间,然后发布一个。
标签: c