我malloc'd一个名为“locations”的结构数组。在所述结构中是称为“国家”的元素。我在下面创建了一个字符串,其中包含“美国”。我malloc'd空间来保存字符串(我需要这样做)并尝试使用strncpy将字符串放入malloced空间。
这在我的代码中的其他地方使用从文件读入的字符串,但不是我直接声明的字符串。
当我打印出结果时,它说结构是“United State(错误符号)”
因此,代替“美国”末尾的s是错误符号。
错误符号看起来像一小块1和0。
char *US_string = "United States";
locations[0].country = malloc(sizeof(US_string));
strncpy(locations[0].country, US_string, strlen(US_string));
任何人都知道发生了什么事?
感谢您的帮助!请尽量不要对我太过刻意,我是CS专业的第一年。只是想把这个bug从实验室中拿出来。
答案 0 :(得分:1)
1
添加到帐户'\0'
来调整mallocing。此外,sizeof(US_string)将给出指针的大小,这可能与实际的字符串大小不同。因此
locations[0].country = malloc(strlen(US_string) + 1);
并且缺少locations[0].country[strlen(US_string)] = '\0'
答案 1 :(得分:1)
sizeof将返回指针大小,而不是字符串大小。使用strlen +1(代表0字符串终止字符):
locations[0].country = malloc(strlen(US_string)+1);