0

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

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

现在将其打印到屏幕上:

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

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

字符串:字符串 1

但是以下代码的结果是:

string

:string

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

4

2 回答 2

1

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

char *ptr = tTemp->string;
ptr[strlen(ptr)-1] = '\0'
于 2012-12-09T09:06:17.040 回答
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,则至少读取一个字符。尽管如此,检查仍然没有什么坏处。

于 2012-12-09T08:50:12.143 回答