我想使用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
不显示?
答案 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'