使用未初始化的值,使用 sprintf 或 strcat 时出错

uninitialized value usage, error while using sprintf or strcat

下面给出的代码片段在我的 IDE 上完全可以正常工作。但是当我在 codeforces 上提交时,我得到一个指向 sprintf 行的错误。

Probably, the solution is executed with error 'uninitialized value usage'

我使用 sprintf 而不是 strcat 按照 Whosebug 答案中的建议连接两个数组。 但它给了我同样的错误。

char a[101],b[101],c[201],d[300];
fgets(a,101,stdin);
fgets(b,101,stdin);
fgets(c,201,stdin);
// strcat(d,a);
sprintf(d, "%s%s",d,a);

你还没有初始化 d 所以它可能没有 '\0' 字符。

strcat 搜索数组中的第一个 0,然后从那里开始连接。如果找不到 0,它会读取数组末尾。

char d[300] = {0};

将为 strcat 和 sprintf 修复它

您正在将未初始化的变量 d 写入位置 d。那没有任何意义。也许你打算做 sprintf(d,"%s",a);

在那种情况下你不需要初始化d,但是如果你使用strcat你必须将d中的第一项初始化为[=16=]

如果您已经初始化了两个字符串,则只能使用 strcat()

由于您还没有将任何内容放入 d,因此您不需要连接到它。只需将 a 的内容复制到其中 strcpy().

strcpy(d, a);

另外,即使你初始化了d,也不能使用

sprintf(d, "%s%s",d,a);

如果 sprintf() 的目标字符串也是源字符串之一,则使用相同的字符串是无效的。