我在C编程,我在将int转换为char时遇到问题。
我正在使用我的Mac与Xcode编程c。
代码是:
int main(){
int t = 2;
printf("test %s\n", (char)t); //EXC_BAD_ACCESS
return 0;
}
我尝试了很多帖子中发现的所有内容,我真的不知道发生了什么......有什么建议吗?
答案 0 :(得分:0)
请在您的问题中包含代码的目标,而不是在下面的评论中。
如果您想要输出
测试2
您必须将%s更改为%d
printf("test %d\n", t);
我猜你对%s
有错误的想法。它不会告诉printf
您希望将 int 作为字符串,它会告诉printf
该参数是一个字符串!显然不是,所以你得到了例外。
如果使用%c,则告诉printf函数您要将当前ASCII表中的数字作为字符输出。例如65是'A'。
如果您有像
这样的连接情况strcpy(str_buscar, "controlID='");
strcat(str_buscar, (char) t);
strcat(str_buscar, "'");
你需要itoa而不是演员:
strcat(str_buscar, (char) t);
您需要以下内容:
char buffer[32]; // enough space for a "number as string"
itoa(t,buffer,10);
strcat(str_buscar, buffer);
(IMHO)快捷方式是“打印”到sprintf
sprintf(str_buscar,"controlID='%d'",t);
而不是打印到控制台sprintf
打印到给定的缓冲区。确保您的缓冲区str_buscar足够大。
答案 1 :(得分:0)
%s
格式说明符表示字符串,而不是单个字符。 Printf认为您传递的数字2是字符串的地址。它尝试访问内存地址2
并失败,因为该地址不存在。
如果要打印字符,则需要%c
说明符。这告诉printf打印ASCII码为2的字符.ASCII字符编号2是according to the ASCII table,是一个无法打印的控制字符,这就是为什么你会得到奇怪的输出。
如果你真的想打印字符' 2' (它有不同的代码,50),你会想要使用类似的东西:
printf("test: %c", (char)('0' + c));
此示例利用了以下事实:所有ASCII字符都有连续的代码,从48开始(' 0')。这样,如果你想打印数字0,你最终会打印出' 0' 0字符(ASCII码48 = 48 + 0)。如果您想打印数字2,您最终将打印出数字2' 2'字符(50 = 48 + 2)。
然而,这种方式有点笨拙并且在遇到大于9的数字时失败(即它仅适用于数字)。更简单的方法是不再使用角色,而是使用'%d'说明符(用于打印整数):int t = 0;
printf("test: %d", t);