下面给出的代码在我的IDE上完全可以正常工作。但是,当我在codeforces上提交此文件时,出现了指向sprintf
行的错误。
可能解决方案执行时出现错误'未初始化的值用法'
我用sprintf代替了strcat
来连接两个数组,如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,因此它可能没有'\ 0'字符。
strcat搜索数组中的前0,然后从那里开始连接。如果找不到0,它将读取数组的末尾。
char d[300] = {0};
将同时修复strcat和sprintf
您正在将未初始化的变量d
写入位置d
。那没有任何意义。也许您打算这样做sprintf(d,"%s",a);
?
在那种情况下,您不需要初始化d
,但是如果您使用strcat
,则必须将d
中的第一项初始化为\0
。
如果已经初始化了两个字符串,则只能使用strcat()
。
由于尚未在d
中添加任何内容,因此您无需将其串联。只需使用a
将strcpy()
的内容复制到其中即可。
strcpy(d, a);
而且,即使您已初始化d,也无法使用
sprintf(d, "%s%s",d,a);
如果它也是源字符串之一,则与sprintf()
的目标使用相同的字符串是无效的。