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

C++ 未初始化的值用法,使用sprintf或strcat时出错,c++,c,printf,strcat,C++,C,Printf,Strcat,下面给出的代码在我的IDE上完全可以正常工作。但是当我在上提交时,我得到一个指向sprintf行的错误 执行解决方案时可能会出现错误“未初始化值用法” 根据stackoverflow的回答,我使用sprintf而不是strcat来连接两个数组。 但它给了我同样的错误 char a[101],b[101],c[201],d[300]; fgets(a,101,stdin); fgets(b,101,stdin); fgets(c,201,stdin); // strcat(d,a); sprint

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

执行解决方案时可能会出现错误“未初始化值用法”

根据stackoverflow的回答,我使用sprintf而不是strcat来连接两个数组。 但它给了我同样的错误

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,因此它可能没有'\0'字符

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

char d[300] = {0};

将为strcat和sprintf修复它

您正在将未初始化的变量d写入位置d。那没有任何意义。也许你是想做sprintfd,%s,a


在这种情况下,不需要初始化d,但如果使用strcat,则必须将d中的第一项初始化为\0。

您正在将未初始化的变量d写入位置d。那没有任何意义。也许你是想做sprintfd,%s,a

在这种情况下,不需要初始化d,但如果使用strcat,则必须将d中的第一项初始化为\0。

只有在已初始化两个字符串的情况下,才能使用strcat

因为您还没有将任何内容放入d中,所以不需要连接到它。只需使用strcpy将a的内容复制到它

此外,即使已初始化d,也不能使用

sprintf(d, "%s%s",d,a);
如果sprintf的目标字符串也是源字符串之一,则使用该字符串作为目标字符串是无效的。

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

因为您还没有将任何内容放入d中,所以不需要连接到它。只需使用strcpy将a的内容复制到它

此外,即使已初始化d,也不能使用

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

如果目标字符串也是源字符串之一,则将同一字符串用作sprintf的目标字符串是无效的。

d未初始化使用。不能将同一字符串用作目标字符串,sprintfd中的源未初始化使用。不能将同一字符串用作sprintf中的目标字符串和源字符串,但无论初始化情况如何,sprintfd,%s%s,d,a;根本没有任何意义。但是不管初始化如何,sprintfd,%s%s,d,a;根本没有任何意义。