【问题标题】:Reading char arrays using pointers使用指针读取 char 数组
【发布时间】:2022-01-24 13:52:33
【问题描述】:

我正在尝试从键盘读取一些 char 数组,但每次程序崩溃。

我想知道如何从键盘轻松输入和存储char 数组。

int main()
{

    int i;
    char *days[7];

    for(i=0;i<7;i++)
    {
        scanf("%s", days[i]);
    }


    for(i=0;i<7;i++)
    {
        printf("%s\n", days[i]);
    }


    return 0;
}

【问题讨论】:

  • 您的scanf() 呼叫错误。 *days[7] 是指向 char 的指针数组,而不是字符串数组。
  • 在尝试写入之前需要先初始化每个指针。
  • JackBet,节省时间。启用所有警告以获得错误代码的快速反馈char *days[7]; ... scanf("%s", days[i]);

标签: c pointers char


【解决方案1】:

char *days[7] 声明一个指针数组。除非使用有效地址初始化,否则它们指向无效的内存位置。因此,当您想写信给它们时,它们会调用未定义的行为。

在使用它们之前,您需要确保它们指向有效的内存(位置)。

【讨论】:

    【解决方案2】:

    Yuo 声明了一个指向 char 的指针,但这些指针没有引用有效内存。

    你需要为它们分配内存:

    int main(void)
        int i;
        char *days[7];
    
        for(i=0;i<7;i++)
        {
            days[i] = malloc(MAXLENGTH);
            scanf("%15s", days[i]);
        }
    
        for(i=0;i<7;i++)
        {
            printf("%s\n", days[i]);
            free(days[i]);
        }
    
        return 0;
    }
    

    或者你可以

    int main(void)
    {
    
        int i;
        char days[7][MAXLENGTH];
    
        for(i=0;i<7;i++)
        {
            scanf("%15s", days[i]);
        }
    
        for(i=0;i<7;i++)
        {
            printf("%s\n", days[i]);
        }
    
        return 0;
    }
    

    【讨论】:

    • 我也可以在for循环之外进行分配吗?比如 days = malloc (MAXLENGHT * numberOfArrays *sizeof(char)) ?
    猜你喜欢
    • 2021-01-26
    • 2015-10-26
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2014-07-23
    相关资源
    最近更新 更多