在c中的单行中打印多个字符串值



我正在从一个返回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,结果相同。

最好避免使用字符串的trimming

在C中,这里的一种可能性是用合适的替换第一个n

char* chop(char *s) {
char *p = s;
while (*p++)
if (*p == 'n') {
*p = '';
break;
}
return s;
}

称为:

char s1[] = "12n";
char s2[] = "13n133n1333n";
char s3[] = "14n";
printf("%s,%s,%s", chop(s1), chop(s2), s3);

它打印CCD_ 4和换行符。

s2的字符不会打印出来。strlen(s2)是2,但sizeof s2是13。

但是方法(从中读取数据)应该是一种帮助,而不是并发症的来源。(在C中,您宁愿指定函数的返回值)

modValuex.A和其他包含一个'n'

要打印不带'n'modValuex.A,请在打印前将其移除或在'n'之前停止打印。


如果可能,只需关闭'n':

modValuex.A[strcspn(modValuex.A, "n")] = '';

如果modValuex.A和好友不可更改,要在'n'之前停止,请使用宽度限制:

// printf(%s,%s,%s,%s n",modValuex.A,modValuex.B,modValuex.C,modValuex.D)
printf(%.*s,%.*s,%.*s,%.*sn",
(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 )
返回字符串中不在第二个字符串中的初始字节数。

最新更新