我有这个运行时错误“访问违规写入位置”与strcpy函数
这是我的部分代码:
else if (strcmp(sentenceRecv, "405002") == 0){
/*winVersion[SIZE] = (char*)malloc(sizeof(tempString));*/
system("ver >> text.txt");
FILE *pfile = fopen("text.txt", "rt+");
if (pfile == NULL)
{
printf("Couldn't open file\n");
}
fread(tempString, sizeof(char), SIZE - 1, pfile);
fclose(pfile);
pfile = fopen("text.txt", "w");
if (pfile == NULL)
{
printf("Couldn't open file\n");
}
fputc((int)' ', pfile);
fclose(pfile);
/* winVersion[SIZE] = strdup(tempString);*/
strcpy(winVersion, tempString);
send(ClientSocket, winVersion, sizeof(winVersion), 0);
menuCheck = 1;
}
错误在这一行:strcpy(winVersion, tempString);
在我写的第一行:
char winVersion[SIZE];
char tempString[SIZE];
答案 0 :(得分:2)
char tempString [SIZE] = {0};
strcpy()需要以空字符结尾的字符串(' \ 0')
否则它将一直持续到它击中' \ 0'在连续内存中可能不属于您的程序的某处,因此访问冲突错误。
您可以使用char *strncpy(char *dest, char *src, size_t n);
并指定SIZE作为要复制的n个字节数。这仍然有些不安全,因为复制的字符串也不会被空终止,并且可能会在以后引起更多问题。