int 2 string
弯路
网上一般查到会说用itoa
函数,
1 |
|
2 |
|
3 | int main() |
4 | { |
5 | int number1 = 123456; |
6 | int number2 = -123456; |
7 | char string[16] = {0}; |
8 | itoa(number1,string,10); |
9 | printf("数字:%d 转换后的字符串为:%s\n",number1,string); |
10 | itoa(number2,string,10); |
11 | printf("数字:%d 转换后的字符串为:%s\n",number2,string); |
12 | return 0; |
13 | } |
像菜鸟教程都这样教, 不过itoa
不是基础库函数而且不符合C99标准, 编译时候直接报警
1 | main.c:13:13: warning: implicit declaration of function 'itoa' is invalid in C99 [-Wimplicit-function-declaration] |
2 | itoa(n, pr, 10); |
3 | ^ |
4 | 1 warning generated. |
5 | Undefined symbols for architecture x86_64: |
6 | "_itoa", referenced from: |
7 | _main in main-2e9155.o |
8 | ld: symbol(s) not found for architecture x86_64 |
9 | clang: error: linker command failed with exit code 1 (use -v to see invocation) |
正道
后面找到用sprintf
1 |
|
2 |
|
3 | |
4 | void main (void) |
5 | { |
6 | int num = 100; |
7 | char str[25]; |
8 | sprintf(str, " %d" , num); |
9 | printf ("The number 'num' is %d and the string 'str' is %s. \n" ,num, str); |
10 | } |
补充
不过遇到比较长的整型时候, 发现疑似溢出的情况(像这个负号)
1 | 3362695274 // 输入 |
2 | - 9 3 2 2 7 2 0 2 2 // 输出(每个数字中间加了空格)) |
其实是整型应该从int
换成long
, 然后就正常了
1 | int main() |
2 | { |
3 | char str[10]; |
4 | long x = 1234567890L; |
5 | sprintf(str,"%ld",x); |
6 | printf("%s",str); |
7 | return 0; |
8 | } |
参考: