C 使用fgets()在同一行打印两个字符串
我想打印用户使用fgets()输入的两个字符串。fgets()允许我用空格存储字符串,并用enter终止它。下面是示例代码: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(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'