【发布时间】:2020-07-17 21:33:16
【问题描述】:
我试图获得一个非常大的数字(超过unsigned long long int)。所以我把它作为一个字符串,然后将它逐位转换为整数并使用它。
#include <stdio.h>
#include <string.h>
int main()
{
char m[100];
int x;
scanf("%s",m);
for(int i=0; i<strlen(m); i++){
sscanf(m[i],"%d",&x);
printf("%d",x);
}
return 0;
}
但是,在编译过程中显示:
警告:传递“sscanf”的参数 1 使指针变为整数 没有演员表
和
注意:预期为“const char * restrict”,但参数的类型为“char”
而且,当我运行程序时,它会给我Segmentation fault (core dumped) 错误。
我也尝试了更简单的代码来查找问题:
#include <stdio.h>
#include <string.h>
int main()
{
char m[5];
char n;
int x;
scanf("%s",m);
n = m[1];
sscanf(n,"%d",&x);
return 0;
}
但没有任何改变。
【问题讨论】:
-
%d不是“数字”,而是“有符号十进制整数”。但至于错误本身,sscanf需要一个const char *(即一个字符串),但你只给出了一个字符。 -
m只有四个字符加上一个谢谢,“非常长”是一个令人震惊的误称。对于很长的数字字符串,您不能安全地使用%d;溢出的行为是未定义的。 -
sscanf(m[i],"%d",&x);是错误的。你应该改用x = m[i] - '0';。并且您的输入字符串对于大数字来说太小了。
标签: c arrays string char scanf