当我尝试将一个字符串保存到一个字符串数组中时,始终出现错误“命令由信号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''。我该如何解决该问题?我认为名称指针指向null存在问题。那是问题吗?感谢您的帮助!
答案 0 :(得分:-1)
2个主要问题。
1)在main()
中,您使用getName()
调用name
,但将name1
存储在students
变量中。
2)在功能getName()
中,name1
是一个本地数组。此变量的范围限于getName()
。您无法通过将其分配给name1
来返回c[0]
的地址,因为函数返回后OS可能会释放它。您可以考虑为此使用malloc()
。