所以我使用fgets从文件中获取字符串,然后将它们添加到一个数组中。但是在我将它们添加到数组之前,我想去掉"\n“。这就是我用来做这个的
strtok(str,"\n");
array[i] = strdup(str);
数组在char *array32中初始化;
现在函数运行得很好,我可以按我不想的方式使用数组和它的元素了。但是,每当我尝试打印元素时,它都不能正常工作。
例如,如果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]);
如上所述,除非后面有一个'\n‘,否则arrayi将不会打印
编辑:新增打印功能文本文件格式
string1
string2
string3
发布于 2019-03-16 01:42:26
C库函数char *strtok(char * str,const char * delim )使用分隔符delim将字符串str分解为一系列标记。所以它不是一个函数,它把字符串当做引用,而当做值。所以当你这样做的时候:
strtok(str, "\n");
str将具有与之前相同的值。如果你想要第一个令牌,比如,在它第一次找到"\n“之前的str值,你必须这样做。
array[i] = strtok(str, "\n");
或
char *token = strtok(str, "\n");
array[i] = strdup(token);
或者其他类似的东西。
代码:
#include <string.h>
#include <stdio.h>
int main () {
char buff[100];
char *array[32];
FILE *fp = fopen("file.txt","r");
int i = 0;
while(fgets(buff, 100, fp)){
char* token = strtok(buff,"\n");
array[i] = strdup(token);
printf("%s:TEST\n", array[i]);
i++;
}
fclose(fp);
return(0);
}
file.txt
HELLO
BYE
输出:
HELLO:TEST
BYE:TEST
https://stackoverflow.com/questions/55187475
复制相似问题