以下代码中的strcpy
行引发了此错误:
C interpreter runtime error: Memory access violation received.
如何解决此错误?
int i = 1, len;
char msg[2000];
//I have 2 strings which I need to send one by one sequentially
char *txt1 = "I am first text";
char *txt2 = "I am second text";
for (i = 1: i < 3; i++)
{
strcpy(msg, txt[i]);
lr_output_message(msg);
len = strlen(msg);
}
答案 0 :(得分:1)
由于很多原因,这可能不是你的代码,因为它永远不会编译
txt
数组。for
循环语法错误。这些只有两个,但对于这样的小代码来说它们很多。
可以提出的另一个问题是
但是代码中最重要的是
你可以简单地使用原始指针并将它们传递给lr_output_message()
函数,并注意你不需要字符串的长度,因为lr_output_message()
可能期望c-string定义为非 null 字节序列,后跟 null 字节。请记住,复制字符串是一项昂贵的操作,如果你能避免它,你应该这样做。
访问冲突可能有很多原因,您正在读取仅有两个数组的第三个元素。您正在将一个非常长的字符串复制到一个没有足够空间的数组。
但是根据发布的代码,我们无法知道哪一个是真正的问题,因为您发布的代码甚至无法编译。
此外,为目标字符串分配一个任意大小的数组“可能”是一个不好的做法恕我直言。您应该对数组的大小有明确的限制,或者在运行时计算它。它实际上取决于很多东西,但是,通常你应该知道字符串保证适合数组,或者在运行时检查。