【问题标题】:Storing input from user as char array C | segmentation fault error将来自用户的输入存储为字符数组 C |分段错误错误
【发布时间】:2021-03-18 23:10:09
【问题描述】:

我正在尝试从用户那里获取输入并将其存储为 char 数组。我有以下代码,其中函数数组将地址返回到字符数组。但是,我收到核心转储错误,这是怎么回事?

//reading and storing input from user as char array
int * array(int * r){
        int ch;
        int i;
        r[10];
        printf("enter your name: ");
        for ( i = 0; i < 10; i++){
                r[i] = getc(stdin);
                printf("%c", r[i]);
        }
        return r;
}
//main
int main(void){
        int *p;
        p = array(p);
}

【问题讨论】:

  • 您从未为p 分配任何内存,因此您取消了对未初始化指针的引用。
  • 您应该使用教程来学习如何从 C 中的标准输入中读取字符串。您的代码没有遵循通常的做法...
  • 您说的是“字符数组”,但您使用的是int
  • 声明r[10]; 没有任何作用。你还声明了一个你从不使用的变量ch
  • 如果您将int *p; 更改为int p[10];,您的代码将起作用

标签: arrays c segmentation-fault


【解决方案1】:

我会尽量和你的代码类似。

数组可以是 char,而不是 int 和许多其他东西(你可以传递 len 而不是硬编码长度等)。无论如何,主要错误是传递一个指针而不初始化它:就像我所做的那样,11个地方是静态的,一个是空字符;或动态使用 malloc。

if 语句仅用于在有人按 enter 或流结束时退出循环,我认为这是您想要的行为。

#include <string.h>
#include <stdio.h>
//reading and storing input from user as char array
void array(int * r){
        int ch;
        int i;
        //r[10];
        printf("enter your name: ");
        for ( i = 0; i < 10; i++){
                int ch = getc(stdin);
                if ( ch == EOF || ch == '\n' || ch == '\r')
                    break;
                r[i] = ch;
                printf("%c", r[i]);
        }
        r[i] = 0;
        
}
//main
int main(void){
        int p[11];
        array(p);
        printf("\nExit\n");
}

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    相关资源
    最近更新 更多