使用fgets()在同一行打印两个字符串

时间:2012-12-09 08:37:51

标签: c string linked-list printf fgets

我想使用fgets()打印两个来自用户输入的字符串。 fgets()允许我用空格存储字符串并用enter键终止它。以下是示例代码:

fgets(tTemp ->string, 51, stdin); fflush(stdin);

现在将其打印到屏幕上:

printf("%s", temp->string); printf(":%s", temp->string2); 
//assuming there are 2 strings

我现在希望它们以相同的格式打印在同一行:

  

的字符串:字符串1

然而,以下代码的结果是:

string

:string

当我打印以获得我想要的格式时,如何使fgets中的\n不显示?

2 个答案:

答案 0 :(得分:0)

你必须将它剥离。首先得到一个指向结尾的指针,然后检查它是否是换行符,在这种情况下用NUL字节替换它。

char *eptr = tTemp->string + strlen(tTemp->string) - 1;

if (eptr >= tTemp->string && *eptr == '\n')
    *eptr = '\0';

需要eptr >= tTemp->string,因为你可能会从fgets中获得空字符串,在这种情况下eptr将指向开始之前。

你还需要检查fgets是否返回NULL,不清楚你是否正在这样做。如果返回NULL,则字符串缓冲区不变,之前的任何内容仍然存在。

编辑:实际上,阅读手册页似乎空字符串无法返回。如果未返回NULL,则至少读取一个字符。尽管如此仍然没有受伤。

答案 1 :(得分:0)

删除字符串中换行符的最简单方法是将其字符(\n)替换为空字符(\0):

char *ptr = tTemp->string;
ptr[strlen(ptr)-1] = '\0'