8.请指出下面代码中的错误 static char *student[MAX_STUDENT_NUM] = {NULL}; int find_student_id_by_name (const char *name) { int i = 0; for (i = 0; student[i] != NULL && i < MAX_STUDENT_NUM; ++i){ if (0 == strcmp(student[i], name)) return i; } return -ERR_NOT_FIND; }
时间: 2023-12-03 10:45:58 浏览: 66
代码中存在两个错误:
1. 在定义 `student` 数组时,使用了 `*` 来声明一个字符指针数组,但是没有为每个指针分配内存空间。因此,需要修改为 `static char student[MAX_STUDENT_NUM][MAX_NAME_LEN] = {0};`,这样就可以声明一个二维字符数组,其中每个字符数组都有 `MAX_NAME_LEN` 个字符的空间。
2. 在比较字符串时,应该使用 `strcmp(student[i], name) == 0` 来判断两个字符串是否相等。因此,需要修改为:
```c
int find_student_id_by_name(const char *name) {
int i = 0;
for (i = 0; i < MAX_STUDENT_NUM; ++i) {
if (strcmp(student[i], name) == 0) {
return i;
}
}
return -ERR_NOT_FIND;
}
```
这样就可以正确地查找学生的 ID 了。
相关问题
8.请指出下面代码中的错误 static char *student[MAX_STUDENT_NUM] = (NULL); int find_student_id_by_name (const char *name) { int i = 0; for (i = 0; student[i] != NULL && i < MAX_STUDENT_NUM; ++i){ if (0 == strcmp(student[i], name)) return i; } return -ERR_NOT_FIND; }
下面是代码中的错误:
1. 在定义 student 数组时,应该使用花括号来初始化为 NULL,而不是使用括号。
修改后的代码应该是:
```
static char *student[MAX_STUDENT_NUM] = { NULL };
```
2. 在 for 循环中,应该先判断 i 是否小于 MAX_STUDENT_NUM,再判断 student[i] 是否为 NULL。
修改后的代码应该是:
```
for (i = 0; i < MAX_STUDENT_NUM && student[i] != NULL; ++i) {
```
3. 在 strcmp 函数中,应该将 name 参数放在前面,将 student[i] 参数放在后面。
修改后的代码应该是:
```
if (0 == strcmp(name, student[i]))
```
4. 在返回错误码时,应该使用负数表示错误状态。
修改后的代码应该是:
```
return -ERR_NOT_FIND;
```
以上是代码中的所有错误。修改后的代码应该是:
```
static char *student[MAX_STUDENT_NUM] = { NULL };
int find_student_id_by_name(const char *name) {
int i = 0;
for (i = 0; i < MAX_STUDENT_NUM && student[i] != NULL; ++i) {
if (0 == strcmp(name, student[i]))
return i;
}
return -ERR_NOT_FIND;
}
```
请指出下面代码中的错误 static char *student[MAX_STUDENT_NUM] = (NULL); int find_student_id_by_name (const char *name) { int i = 0; for (i = 0; student[i] != NULL && i < MAX_STUDENT_NUM; ++i){ if (0 == strcmp(student[i], name)) return i; } return -ERR_NOT_FIND; }
代码中有如下错误:
1. 第一行中,应该使用数组来存储学生的姓名,而不是指针数组。应该将 char *student[MAX_STUDENT_NUM] 改为 char student[MAX_STUDENT_NUM][MAX_NAME_LEN]。
2. 第一行中,赋值语句中不应该有括号,应该改为等号。
3. 第六行中,应该先判断 i 是否小于 MAX_STUDENT_NUM,再判断 student[i] 是否为 NULL,否则可能会出现数组越界的问题。
4. 第七行中,strcmp 函数返回值为 0 表示两个字符串相等,应该将判断条件改为 if (strcmp(student[i], name) == 0)。
5. 第九行中,-ERR_NOT_FIND 应该改为 -ERR_STUDENT_NOT_FOUND。
修改后的代码如下:
```
static char student[MAX_STUDENT_NUM][MAX_NAME_LEN] = {0};
int find_student_id_by_name(const char *name) {
int i = 0;
for (i = 0; i < MAX_STUDENT_NUM && student[i][0] != '\0'; ++i) {
if (strcmp(student[i], name) == 0) {
return i;
}
}
return -ERR_STUDENT_NOT_FOUND;
}
```
阅读全文