【问题标题】:C - Make variable INT as Char * for strcatC - 将变量 INT 作为 strcat 的 Char *
【发布时间】:2012-10-22 02:10:49
【问题描述】:

我正在尝试使用表示整数的 char 来制作 char *。 所以到目前为止我有这个

int x;
for(x=0;x<12;x++){
    cp->name=strcat(tp->name, (char *)x);
}

名字是字符* 问题是 x 部分。我得到分段错误,我假设这是因为它无法访问地址 x 的内容并将其转换为 char *

这方面有什么建议吗?

谢谢

【问题讨论】:

    标签: c pointers char strcat


    【解决方案1】:

    通过将x 转换为char *,您是在告诉编译器,“我知道我在做什么。将x 视为地址并将其传递给strcat

    因为x 包含一个介于0 和12 之间的整数,strcat 正试图访问位于该数字地址的字符数组。因为内存中的那个地址很可能不属于你,所以你遇到了段错误。

    您需要sprintfsnprintf 来获取整数的字符串表示形式。

    例如:

    int x;
    for(x=0;x<12;x++){
        char buffer[16];
        snprintf(buffer, sizeof(buffer), "%d", x);
        cp->name=strcat(tp->name, buffer);
    }
    

    【讨论】:

      【解决方案2】:

      您需要将x 中的数字显式转换为字符串(=chars 的数组)。你不能仅仅通过类型转换来做到这一点。

      使用sprintf() 可能是最简单的方法:

      int x;
      for (x = 0; x < 12; x++)
          sprintf(tp->name + strlen(tp->name), "%d", x);
      

      不用说,tp-&gt;name 中必须有足够的空间,并且必须在执行上述操作之前将其终止为'\0'

      【讨论】:

      • 请注意,这会修改 tp-&gt;name,如果 tp-&gt;name 最初包含“tp”,则会产生类似“tp123456789101112”的内容。
      • @LieRyan 好吧,这就是 OP 显然要求的,它可能是我们所需要的,我们不知道。
      【解决方案3】:

      在C语言中,你可以使用sprintf(str,"%d",x);或在 C++ 字符串流std::ostringstream oss; oss &lt;&lt; tp-&gt;name &lt;&lt; x; 中。如果你对使用非标准函数没有疑虑,你也可以使用非标准的itoa()函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多