首页 > 解决方案 > C : 访问冲突读取位置 0x00000044

问题描述

我有一个标题为 [what],[where],[who] 的文件,我将它放入一个数组列表中。我正在尝试将括号和单词数组连接在一起。像 [what] 但会弹出错误。

“在 project.exe 中的 0x0F20EDD0 (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00000044”

char intent[255];
char inv[3][10] = { "what","where","who" };

//char stringCat = strncat(intent, inv[0],10);
snprintf(intent, sizeof(intent), "[%s]", inv[0]);

我能知道为什么会这样吗?

标签: carraysstringconcat

解决方案


intent[0] 是一个字符,而不是一个字符 *。strcat 将附加到第一个参数中指向的 char * 的末尾,因此您会收到错误消息。更改为 strcat(intent, inv[0]) 将解决这个直接问题,但代码仍然是错误的。

您需要将字符串以 nil 结尾,因此您需要在 strcat() 之前使用 intent[1] = '\0'。

strcat 也只是简单地写入意图的末尾,因此 stringCat 和 totalCat 是无意义的变量——它们只是指向意图。

您还可以更好地使用 strncat() 而不是 strcat() 来防止缓冲区溢出。


推荐阅读