我正在尝试删除用户输入的前导零,因此000002将变为2 但是,我收到错误说分段错误(核心转储)
#include <stdio.h>
#include <string.h>
int main()
{
char *str;
scanf("%c", *str);
int n;
if( ( n = strspn(str, "0" ) ) != 0 && str[n] != '\0' ) {
printf("String without leading zeros is %s \n", &str[n]);
} else {
printf("No leading zeros in %c \n", str);
}
return 0;
}
答案 0 :(得分:2)
将%c
更改为%s
,将*str
更改为str
。
扫描时无需使用*
。
答案 1 :(得分:2)
除了前面答案中指出的错误之外,scanf(“%d”)将负责为您删除前导零。做测试:
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%d\n",a);
return 0;
}
如果你绝对需要一个字符串,只需用sprintf转换:
#include <stdio.h>
int main()
{
char str[256];
int a;
scanf("%d", a);
sprintf(str, "%d", a);
puts(str);
return 0;
}
答案 2 :(得分:1)
正如@ user3291093所说,你需要将%c更改为%s,因为你正在读取字符串/字符数组而不是单个字符。
您还需要malloc
区域来存储阵列。例如:
char *str = NULL;
str = malloc(100*sizeof(char));
scanf("%s", str);
答案 3 :(得分:1)
从中删除*:
scanf("%c", *str);
并将%c更改为%s,因为您正在扫描字符串而不是字符
答案 4 :(得分:0)
编译器应该已经警告过这个问题。 确保已启用警告。
char *str;
scanf("%c", *str); // "%c" does not match `*str` for scanf()
怀疑OP需要像
这样的东西char str[100];
if (scanf("%99s", str) == 1) Continue_Along_the_Happy_Path();
另一种fgets()
解决方案。
char str[100];
fgets(str, sizeof str, stdin);
char *p = buffer;
while (*p == '0') p++;
if (p != buffer) {
printf("String without leading zeros is %s", p);
} else {
printf("No leading zeros in %s", str);
}