Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scanf输出中的奇怪字符_C_Scanf_C Strings - Fatal编程技术网

scanf输出中的奇怪字符

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"

我正在编写一个用于小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"\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 %