首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除新行时字符串不显示

删除新行时字符串不显示
EN

Stack Overflow用户
提问于 2019-03-16 01:01:09
回答 1查看 81关注 0票数 -4

所以我使用fgets从文件中获取字符串,然后将它们添加到一个数组中。但是在我将它们添加到数组之前,我想去掉"\n“。这就是我用来做这个的

代码语言:javascript
复制
strtok(str,"\n");
array[i] = strdup(str);

数组在char *array32中初始化;

现在函数运行得很好,我可以按我不想的方式使用数组和它的元素了。但是,每当我尝试打印元素时,它都不能正常工作。

例如,如果array[i] = hello

代码语言:javascript
复制
printf("%s:TEST",array[i]);

将打印

代码语言:javascript
复制
:TEST

代码语言:javascript
复制
printf("%s\n:TEST",array[i]);

将打印

代码语言:javascript
复制
hello
:TEST

我需要它在同一行上,所以我不能使用\n,奇怪的是,它只在后面有新行的情况下才会打印。

编辑:不是strdup(strok)而是strdup(str)

编辑:完整的代码示例:

代码语言:javascript
复制
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将不会打印

编辑:新增打印功能文本文件格式

代码语言:javascript
复制
string1
string2
string3
EN

回答 1

Stack Overflow用户

发布于 2019-03-16 01:42:26

C库函数char *strtok(char * str,const char * delim )使用分隔符delim将字符串str分解为一系列标记。所以它不是一个函数,它把字符串当做引用,而当做值。所以当你这样做的时候:

代码语言:javascript
复制
strtok(str, "\n");

str将具有与之前相同的值。如果你想要第一个令牌,比如,在它第一次找到"\n“之前的str值,你必须这样做。

代码语言:javascript
复制
array[i] = strtok(str, "\n");

代码语言:javascript
复制
char *token = strtok(str, "\n");
array[i] = strdup(token);

或者其他类似的东西。

代码:

代码语言:javascript
复制
#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

代码语言:javascript
复制
HELLO
BYE

输出:

代码语言:javascript
复制
HELLO:TEST
BYE:TEST
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55187475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档