As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
7年前关闭。
我想打印两个字符串,这些字符串是用户使用fgets()输入的。 fgets()允许我存储带空格的字符串并以Enter结束。以下是示例代码:
现在将其打印到屏幕上:
我现在希望它们以如下格式在同一行上打印:
字符串:string1
但是,以下代码的结果是:
我如何才能使fgets中的
需要
您还需要检查fgets是否返回NULL,但不清楚是否这样做。如果返回NULL,则字符串缓冲区不变,以前的内容将仍然存在。
编辑:实际上,阅读手册页似乎无法返回空字符串。如果不返回NULL,则至少读取一个字符。虽然仍然没有伤害检查。
7年前关闭。
我想打印两个字符串,这些字符串是用户使用fgets()输入的。 fgets()允许我存储带空格的字符串并以Enter结束。以下是示例代码:
fgets(tTemp ->string, 51, stdin); fflush(stdin);
现在将其打印到屏幕上:
printf("%s", temp->string); printf(":%s", temp->string2);
//assuming there are 2 strings
我现在希望它们以如下格式在同一行上打印:
字符串:string1
但是,以下代码的结果是:
string
:string
我如何才能使fgets中的
\n
在打印以获取所需格式时不显示? 最佳答案
您必须将其剥离。首先获得一个指向末尾的指针,然后检查它是否为换行符,在这种情况下,将其替换为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,则至少读取一个字符。虽然仍然没有伤害检查。