为什么会在此处引发读取访问冲突

时间:2014-04-05 17:31:56

标签: c error-handling access-violation

到目前为止,我的程序完美无瑕。但是在达到下面的代码时,它会出错,给我一个RAV。

char Intermediary[121] = "nnbyonnnnyonnnnyognnbynnnnnyngnrbynnnrnynnnrnyngnnbnonnnnnognrbnnnnrnnngwnbnonwnnnonwnnnogwnbnnnwnnnngwrbnnnwrnnnnwrnnng";
char* result[1024] = { "" };


for (i = 0; i < 120; i++)
{
    if (strchr(Intermediary[i], "y") && strchr(Intermediary[i], "b") && strchr(Intermediary[i], "o"))
        //Conditions passes, set result
        concat(result, Intermediary[i]);
    else
    {
        break;
    }

}

if (i == 120)
{
    // No condition passed: throw an error
    printf("Error: Condition failed :(\n");
    exit(1);
}

printf("%s", result);
getchar();

return 0;

concat的代码可以在这里找到,由David Heffernan发布:How do I concatenate two strings in C?

提前谢谢你:)

2 个答案:

答案 0 :(得分:1)

  • 不要使用幻数:数组中的元素:(sizeof arr/sizeof *arr)
  • strchr()没有编译器警告?我很失望。始终使用编译器选项-Wall -Wextra,并适当处理所有警告。
  • 那个循环泄漏就像没有明天一样。

可能还有更多错误。

答案 1 :(得分:1)

strchr的签名是

char* strchr(char* string, int elem);

这意味着字符串应该是第一个而元素是第二个。当你写

strchr(Intermediary[i], "y")

您传递char作为第一个参数,char *作为第二个参数。这将导致代码绝对不能按照您的想法执行。

你的意思是写

strchr(Intermediary + i, 'y')

表示“搜索字符Intermediaryi步,偏移y个字符{?1}}?

希望这有帮助!