2016-11-18 57 views
-1

strcpy线下面的代码中抛出这个错误:C解释运行时错误:内存访问冲突收到

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); 
} 
+1

什么是'txt'? “(i = 1:i <3; i ++)”中的':'是什么?请发布真实的代码。 –

+0

也许'char * txt [] = {“我是第一个文本”,“我是第二个文本”}和'for(i = 0:i <2; i ++)' – LPs

+0

@LP你的意思是'我<3'我想。 –

回答

1

对于很多原因,这不可能是你的代码,因为它永远不会编译

  1. 没有txt阵列的任何地方。
  2. for循环语法错误。

这些只有两个,但他们对于这样的小代码很多。

可以问另一个问题是

  • 什么是C解释

但在你的代码中最重要的事情是

  • 没有很好的理由来复制串!

你可以简单地使用原来的指针,并将其传递给lr_output_message()功能,并且还注意到,你不需要因为可能lr_output_message()期待定义为非空的序列字符串的长度字节后跟字节。请记住,复制一个字符串是一个昂贵的操作,如果你可以避免它,你应该。

访问冲突可能有很多原因,您正在读取仅有两个数组的第三个元素。您正在将一个很长的字符串复制到没有足够空间的数组中。

但是从发布的代码中无法知道哪一个是真正的问题,因为您发布的代码甚至不会编译。

此外,分配一个任意大小的数组“可能”足够大的目标字符串是一个不好的做法恕我直言。您应该对数组大小有明确的限制,或者在运行时计算它。它实际上依赖于很多东西,但是,一般来说,您应该知道该字符串是保证适合数组,或者在运行时检查。