我正在尝试使用表示整数的char来创建char *。 所以到目前为止我有这个
int x;
for(x=0;x<12;x++){
cp->name=strcat(tp->name, (char *)x);
}
名称是char * 问题是x部分。我得到分段错误,我假设它是因为它无法访问地址x的内容并将其转换为char *
关于此的任何提示?
由于
答案 0 :(得分:3)
通过将x
转换为char *
,您告诉编译器,“我知道我在做什么。将x
视为地址并将其传递给{{1 }}“
因为strcat
包含0到12之间的整数,x
正试图访问该数字地址处的字符数组。因为内存中的地址很可能不属于你,所以你会遇到一个段错误。
您需要strcat
或sprintf
来获取整数的字符串表示。
例如:
snprintf
答案 1 :(得分:0)
您需要将x
中的数字显式转换为字符串(= chars
数组)。你不能仅仅通过类型演员来做到这一点。
使用sprintf()
可能是最简单的方法:
int x;
for (x = 0; x < 12; x++)
sprintf(tp->name + strlen(tp->name), "%d", x);
毋庸置疑,tp->name
必须有足够的空间且必须'\0'
- 在您执行上述操作之前已终止。
答案 2 :(得分:0)
在C中,您可以使用sprintf(str,"%d",x)
;或者在C ++ stringstream std::ostringstream oss; oss << tp->name << x;
中。如果您对使用非标准功能没有疑虑,您也可以使用非标准itoa()功能。