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

C 使用fgets()在同一行打印两个字符串,c,string,linked-list,printf,fgets,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 我现在希望它们以如下格式打印在同一行上: 字符串

我想打印用户使用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,则至少读取一个字符。尽管如此,检查仍然没有什么坏处。

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

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