我想获取一个非常大的数字(超过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 *
(即一个字符串),但你却只提供了一个单独的字符。 - kaylumm
只有四个字符加上一个感谢,"非常长"是一个令人震惊的误称。你不能安全地使用%d
来处理非常长的数字字符串;溢出时的行为是未定义的。 - Jonathan Lefflersscanf(m[i],"%d",&x);
是错误的。你应该使用x = m[i] - '0';
。而且你的输入字符串对于一个大数来说太小了。 - Jean-François Fabre