scanf输出中的奇怪字符
我正在编写一个用于小C程序的函数。该函数应该提示用户输入n个7位字母数字的课程代码字符串,并将这些字符串作为数组返回。我写了一个函数,我认为应该这样做,但是我遇到了一些错误scanf输出中的奇怪字符,c,scanf,c-strings,C,Scanf,C Strings,我正在编写一个用于小C程序的函数。该函数应该提示用户输入n个7位字母数字的课程代码字符串,并将这些字符串作为数组返回。我写了一个函数,我认为应该这样做,但是我遇到了一些错误 char ** getNCourses(int n) { char **courses; courses = malloc(n * sizeof(char)); for (int i=0; i<n; i++) { printf(INQUIRY_COURSE_CODE"
char ** getNCourses(int n) {
char **courses;
courses = malloc(n * sizeof(char));
for (int i=0; i<n; i++) {
printf(INQUIRY_COURSE_CODE"\n", i);
courses[i] = malloc(8);
scanf("%7s", courses[i]);
flush();
}
return courses;
}
我不确定为什么有些课程代码出现时没有问题,而另一些则完全不正确。我相信这不是读取数据的问题,而是实际分配内存并返回数组的问题,但我不知所措
字符**课程;
课程=mallocn*sizeofchar
课程指向char*。每个char*需要sizeof char*字节,而不是sizeof char字节。其中n个需要n*sizeof char*字节
通过始终编写Pointer=mallocn*sizeof*Pointer;,可以避免类似的错误;。然后sizeof*指针始终生成指向的类型的大小;你永远不必推断出它的类型。它还会根据声明更改自动进行调整:如果编辑代码以更改指针的声明,sizeof仍然是正确的,因为它使用指针来获取类型,而不是硬编码的类型
字符**课程;
课程=mallocn*sizeofchar
课程指向char*。每个char*需要sizeof char*字节,而不是sizeof char字节。其中n个需要n*sizeof char*字节
通过始终编写Pointer=mallocn*sizeof*Pointer;,可以避免类似的错误;。然后sizeof*指针始终生成指向的类型的大小;你永远不必推断出它的类型。它还会根据声明的更改自动进行调整:如果编辑代码以更改指针的声明,则sizeof仍将是正确的,因为它使用指针来获取类型,而不是硬编码的类型。什么是flush?而c=fgetc stdin!=EOF&c!='\n′;其中c是一个整数。什么是flush?而c=fgetc stdin!=EOF&c!='\n′;其中c是一个int。
// prompt the user for course codes
char **pCourses;
pCourses = getNCourses(MAX_COURSES);
for (int i=0; i<MAX_COURSES; i++) {
printf("%s ", pCourses[i]);
}
Registering 10 courses.
Please enter the 7-digit course code for course 0:
CST8101
Please enter the 7-digit course code for course 1:
CST8102
[...]
CST8109
Please enter the 7-digit course code for course 9:
CST8110
�@�� CST8102 �@�� �@�� �@�� CST8106 CST8107 CST8108 CST8109 CST8110 %