c - 将字符串添加到字符串数组时打印 ����

标签 c

当我尝试将字符串保存到字符串数组中时,我不断收到错误“命令由信号 11 终止”。从下面的链接更改代码后,现在名称打印出“W”。

我用过这个link修复我的代码,但它仍然导致我收到错误“命令由信号 11 终止”。

    #include<stdio.h>
    #include<string.h>

    void getName(char* c[], int size);
    int main(void) {
        int yenoSize = 0;
        int strSize = 0;
    char name1[30];
    char* name[30];
    char* students[5][30];

    for(int i=0;i<1;i++){
    getName(name, strSize);
    students[i][0] = name1;
    }

    for(int k=0; k<1;k++){
    printf("Student Name: %s \n", students[k][30]);

    }

    }

    void getName(char* c[], int size){
    char name1[30];
    printf("Enter student name: ");
    fgets(name1, 30, stdin);
    c[0] = &name1[0];
    printf("%s", name1);

    }

输出应该打印出用户输入的姓名(学生姓名:Jon),但当前正在打印“W”。我该如何解决这个问题?我相信问题存在于名称指针指向空。这是问题所在吗?我感谢您的帮助!

最佳答案

2 个主要问题。

1) 在 main() 中,您使用 name 调用 getName(),但将 name1 存储在students 变量。

2) 在函数getName()中,name1是一个本地数组。该变量的范围仅限于getName()。您不能通过将name1的地址分配给c[0]来返回它,因为它可能会在函数返回后被操作系统释放。您可以考虑使用 malloc() 来实现此目的。

关于c - 将字符串添加到字符串数组时打印 ����,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585421/

相关文章:

C - 如何计算文件中每个单词的出现次数并删除重复单词

c - 如何通过 Windows 上的 system() 函数将换行符作为参数传递?

c - 以编程方式更改外部 DLL 的 VersionInfo

c - 多线程程序中的双重释放或损坏

c - 具有指针标记结构的 malloc

c - 使用 chdir() 是在 Linux C 中更改工作目录的唯一方法吗?

无法在 SQLITE、C API 中准备 INSERT 语句

c - 函数 ‘peachy’ 的参数太少

可以修改 C 中的字符串文字吗?

c - 如何找到数组中最大和最小数字的位置?