[英]used uninitialized value of size 8 by strcat using C++ with Valgrind while saving data
[英]uninitialized value usage, error while using sprintf or strcat
下面给出的代码在我的 IDE 上完全可以正常工作。 但是当我在codeforces上提交这个时,我收到一个指向sprintf
行的错误。
可能,解决方案执行时出现错误“未初始化的值使用”
我使用 sprintf 而不是strcat
来连接两个 arrays ,如stackoverflow答案所建议的那样。 但它给了我同样的错误。
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
写入位置d
。 这没有任何意义。 也许你打算做sprintf(d,"%s",a);
?
在这种情况下,您不需要初始化d
,但如果您使用strcat
,则必须将d
中的第一项初始化为\0
。
如果您已经初始化了两个字符串,则只能使用strcat()
。
由于您尚未将任何内容放入d
中,因此您无需连接到它。 只需使用strcpy()
将a
的内容复制到其中即可。
strcpy(d, a);
另外,即使你已经初始化了d,你也不能使用
sprintf(d, "%s%s",d,a);
如果它也是源字符串之一,则使用与sprintf()
的目标相同的字符串是无效的。
您尚未初始化 d ,因此它可能没有 '\0' 字符。
strcat 搜索数组中的第一个 0,然后从那里开始连接。 如果它找不到 0,它会读取数组末尾的内容。
char d[300] = {0};
将为 strcat 和 sprintf 修复它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.