我有一个 C 程序,它可以将文件逐行加载到一个字符串中,然后使用以下代码将这个字符串 memcpy 加载到另一个字符串指针中:
typedef struct inmod_struct {
Int32 ReturnCode;
Int32 Length;
char Body[ROWSIZE];
} inmdtyp,*inmdptr;
inmdptr inmodptr;
char line[600];
int doit()
{
char *p;
p = inmodptr->Body;
ReadFile(); //reads a line of the file into **line** string variable
memcpy(p, line, strlen(line));
p += strlen(line);
inmodptr->ReturnCode = 0;
inmodptr->Length = p - inmodptr->Body;
reccnt++;
}
但是当我在我的 Windows XP SP3 机器上执行上述程序时,我收到一个错误消息框,上面写着:
“<内存地址>”处的指令引用了“<内存地址>”处的内存。内存无法“写入”。单击确定终止....
当我尝试进行类似的内存操作时,我遇到了类似的问题,它给出了类似的问题。strcpy 最适合我,但 strcpy 省略了读取该行的 NUL 字符,但即使在该行中的 NUL 之后,我也会读取更多字符。任何人都可以为此提供解决方法或任何建议。
环境:Windows XP SP3,GCC编译器。
我什至在 solaris unix 上尝试过类似的代码编译和使用,我在那里面临同样的问题。
我在一些 OpenCV Python、C 示例中也遇到了类似的错误。
编辑:
对不起,伙计们..我有那个指针 p 初始化p = inmodptr->Body;
inmodptr 是一个结构。我可以确认指针初始化不是问题。为了清楚起见,发布了完整的代码