gpt4 book ai didi

不能在 C 中将 sscanf() 用于字符数组

转载 作者:行者123 更新时间:2023-12-03 14:00:20 26 4
gpt4 key购买 nike

我试图得到一个非常大的数字(超过 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;
}

但是,在编译期间它显示:

warning: passing argument 1 of ‘sscanf’ makes pointer from integer without a cast





note: expected ‘const char * restrict’ but argument is of type ‘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;
}

但什么都没有改变。

最佳答案

scanf不适用于字符。一旦你有了字符,只需通过减去 '0' 将数字转换为整数作为字符:

for(int i=0; i<strlen(m); i++){
x = m[i] - '0'; // line to change
printf("%d",x);
}

此外,为了确保缓冲区不会溢出,100 字节是好的,但您可能希望在 scanf 中使用相应的限制。并检查返回代码:
if (scanf("%99s",m) == 1) {

关于不能在 C 中将 sscanf() 用于字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61050429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com