删除前导零错误

时间:2014-03-08 18:16:38

标签: c

我正在尝试删除用户输入的前导零,因此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;
}

5 个答案:

答案 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);
}