C语言中将char* argv[1]转为int并无警告打印的方法及报错修正
解决printf格式不匹配的警告与异常输出问题
你遇到的问题根源非常明确:你在printf里传错了参数类型。
看你代码里的这一行:
printf("key_length = %d", &key_length);
%d格式符要求对应的参数是int类型的实际数值,但你传的&key_length是变量的内存地址,类型是int*(指针)。编译器已经通过警告明确提示了你——格式期望int,但实际传入了int*。而运行时输出的奇怪数字,其实是这个内存地址被强制当成int解析后的结果,自然不是你想要的key_length的真实值。
修正后的代码
只需要把&key_length改成key_length,直接传递变量本身的数值即可:
#include <stdio.h> #include <stdlib.h> int main(int argc,char* argv[]) { int key_length = atoi(argv[1]); printf("key_length = %d", key_length); return(0); }
额外补充一句:如果之后你需要打印变量的内存地址,应该使用%p格式符,比如printf("key_length的地址是:%p", &key_length);,这样才符合参数类型的要求。
内容的提问来源于stack exchange,提问作者LinuxCrusher
相关产品推荐
相关产品推荐

