gpt4 book ai didi

c - 将值赋给 ScanF 中的 char *

转载 作者:行者123 更新时间:2023-11-30 15:45:46 24 4
gpt4 key购买 nike

有人可以帮我理解为什么当我尝试打印出 Student_name 的值时,它只返回 null 吗?我正在用 C 实现一个基本的哈希表来存储学生的姓名、id 和 2 个测试。其他一切都存储正确,无论我尝试什么,我都无法保存学生姓名。我有两个结构,哈希表本身,然后记录我打算放入表中的元素。字符串的长度永远不会超过 18 个字符。

int main(){
char op[1];
int stu_id[1];
int exam1[1];
int exam2[1];
char * student_name = (char*)malloc(18*sizeof(char));

struct hashtable * dictionary = malloc(sizeof(struct hashtable));
dictionary->size = 13;
dictionary->table = malloc(13*sizeof(struct record *));

if(dictionary==NULL||dictionary->table==NULL){
printf("Unable to allocate memory for the dictionary.\n");
return;
}

int i;
int s = 13;
while(i<s){
dictionary->table[i]=NULL;
i++;
}

while(scanf("%s %d %d %d %s", op, stu_id, exam1, exam2, student_name) !=EOF){

if(*op=='i'){
printf("Intializing %s\n", *student_name);
add_item(dictionary, stu_id[0], exam1[0], exam2[0], student_name);
}
free(dictionary);
free(student_name);
return 0;

}

最佳答案

请记住,字符串始终必须包含特殊终止符 ('\0')。这意味着长度为 1 的字符串(如您的 op 数组)实际上是两个 个字符。

这意味着当您读入 op 时,您实际上超出了数组的范围,从而导致未定义的行为。您需要增加 op 的大小(至少为两个),或者将其声明为单个 char (即不是数组)并使用 ' %c' 读取单个字符的格式代码。

此外,不要将整型变量声明为数组,而是在调用 scanf 时使用取址运算符 &:

char op;
int stu_id;
int exam1;
int exam2;

/* ... */

scanf("%c %d %d %d %s", &op, &stu_id, &exam1, &exam2, student_name)

您也不应该根据 EOF 检查 scanf 的返回值,以防输入格式不正确。将其与您要扫描的值的数量进行比较,在您的情况下是五个。

关于c - 将值赋给 ScanF 中的 char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18821103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com