c - 指向 char 数组的指针的问题

标签 c pointers char

<分区>

这个程序应该遍历一个由 0 和 1 组成的数组,并计算其中有多少个 0、1 和所有字符的组合。 但是,循环内的 print 语句会打印出一堆“48”和“49”。 即使字符数计算正确,似乎它不是从“if 语句”中的指针中提取值,而是获取内存地址。

代码本身:

#include <stdio.h>      /* using printf, gets, BUFSIZ */

int main(int argc, char *argv[])
{
    char input[BUFSIZ];

    int n;
    char *labelPtr;
    int zeroCount=0;
    int oneCount=0;
    n=0;

    gets(input);

    while(input[n])
    {
        labelPtr=&input[n];
        printf("%d \n", *labelPtr);
        if (*labelPtr==0)
        {
            zeroCount++;
        }
        if(*labelPtr==1)
        {
            oneCount++;
        }
        n++;
    }
    printf("The number of characters is %d \n", n);
    printf("The number of zeros is %d \n", zeroCount);
    printf("The number of ones is %d \n", oneCount);
}

最佳答案

  1. 不要使用gets。这是众所周知的安全问题原因。使用 fgets相反。

  2. 您没有理由为labelPtr 使用char* 类型。仅使用 char label;

  3. if (*labelPtr == 0) 的使用不正确,因为 *labelPtrchar 并且字符的值'0' 不等于整数常量 0。您需要将它与 '0' 进行比较。 if (*labelPtr == '0')。同样,使用 if (*labelPtr == '1')

  4. 要打印 char,请使用格式说明符 %c,而不是 %d

    printf("%c \n", *labelPtr);
    

    如果您使用 %d 作为格式说明符,您将获得用于对字符进行编码的整数值作为输出。对于 ASCII 编码,字符 '0' 得到 48,字符 '1' 得到 49


这是您发布的代码的更新版本。

#include <stdio.h>      /* using printf, gets, BUFSIZ */

int main(int argc, char *argv[])
{
    char input[BUFSIZ] = {};

    int n = 0;
    char label;
    int zeroCount=0;
    int oneCount=0;

    fgets(input, sizeof(input), stdin);

    while( input[n] )
    {
        label = input[n];
        printf("%c \n", label);
        if (label == '0')
        {
            zeroCount++;
        }
        if(label == '1')
        {
            oneCount++;
        }
        n++;
    }
    printf("The number of characters is %d \n", n);
    printf("The number of zeros is %d \n", zeroCount);
    printf("The number of ones is %d \n", oneCount);
}

关于c - 指向 char 数组的指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49744926/

相关文章:

c - 如何在 C 中从 char** 转换为 char*?

c - 了解条件运算符

c - 了解某些 ELF 文件结构

c - 调用数组的特定索引时,打印所有值

c++ - Lambdas 并将指针类作为参数传递

c - 使用哪个循环?

c++ - 修改PIN中的申请说明

c - 找出指针是否指向堆栈、堆或程序文本?

c - 当我尝试运行它时,程序崩溃了,我不知道为什么

C中的char指针初始化