1

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

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

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

对此有什么建议吗?

谢谢

4

3 回答 3

3

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

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

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

例如:

int x;
for(x=0;x<12;x++){
    char buffer[16];
    snprintf(buffer, sizeof(buffer), "%d", x);
    cp->name=strcat(tp->name, buffer);
}
于 2012-10-22T02:17:29.497 回答
0

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

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

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

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

于 2012-10-22T02:17:06.233 回答
0

在 C 中,您可以使用sprintf(str,"%d",x); 或在 C++ stringstreamstd::ostringstream oss; oss << tp->name << x;中。如果你对使用非标准函数没有疑虑,你也可以使用非标准的itoa()函数。

于 2012-10-22T02:17:10.590 回答