我正在从返回 4 个字符串值的方法中读取数据
printf(%s,%s,%s,%s \n",modValuex.A,modValuex.B,modValuex.C,modValuex.D)
它给出如下值,但不在一行中,如 (12,-12,45 )
12
,-12
,45
1
,-23
119
我该如何解决这个问题/我也尝试添加 \r 和 \t,结果相同。
modValuex.A和其他包含一个'\n'.
要在modValuex.A不打印的情况下'\n'打印,请在打印之前将其删除或在'\n'.
如果可能的话,简单地去掉'\n':
modValuex.A[strcspn(modValuex.A, "\n")] = '\0';
如果modValuex.A和朋友不变,要在 之前停止'\n',使用宽度限制:
// printf(%s,%s,%s,%s n",modValuex.A,modValuex.B,modValuex.C,modValuex.D)
printf(%.*s,%.*s,%.*s,%.*s\n",
(int) strcspn(modValuex.A, "\n"), modValuex.A,
(int) strcspn(modValuex.B, "\n"), modValuex.B,
(int) strcspn(modValuex.C, "\n"), modValuex.C,
(int) strcspn(modValuex.D, "\n"), modValuex.D);
size_t strcspn( const char *dest, const char *src )
返回字符串中不在第二个字符串中的初始字节数。
如评论所述,最好避免使用这种trimming字符串。
在 C 中,一种可能性是用就地替换第\n一个。\0
char* chop(char *s) {
char *p = s;
while (*p++)
if (*p == '\n') {
*p = '\0';
break;
}
return s;
}
像这样调用:
char s1[] = "12\n";
char s2[] = "13\n133\n1333\n";
char s3[] = "14\n";
printf("%s,%s,%s", chop(s1), chop(s2), s3);
它打印12,13,14和换行符。
s2不要打印的字符。strlen(s2)是 2,但是sizeof s2是 13。
但是那个方法(你从中读取数据)应该是一种帮助,而不是复杂的根源。(在 C 中,您宁愿分配函数的返回值)