【问题标题】:uninitialized value usage, error while using sprintf or strcat未初始化的值使用,使用 sprintf 或 strcat 时出错
【发布时间】:2020-10-02 00:54:30
【问题描述】:

下面给出的代码在我的 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 未初始化使用。
  • 你不能在sprintf()中使用与目标和源相同的字符串

标签: c++ c printf strcat


【解决方案1】:

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

由于您还没有在d 中添加任何内容,因此您不需要连接它。只需将a 的内容用strcpy() 复制到其中即可。

strcpy(d, a);

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      char d[300] = {0};
      

      将为 strcat 和 sprintf 修复它

      【讨论】:

      • 但不管初始化如何,sprintf(d, "%s%s",d,a); 根本没有任何意义。
      猜你喜欢
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2021-09-22
      • 2015-03-12
      相关资源
      最近更新 更多