-1

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

4

2 回答 2

0

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 )
返回字符串中不在第二个字符串中的初始字节数。

于 2021-08-03T11:31:42.833 回答
0

如评论所述,最好避免使用这种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 中,您宁愿分配函数的返回值)

于 2021-08-03T09:09:43.257 回答