Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Strcat()引发访问冲突异常。为什么?_C - Fatal编程技术网

Strcat()引发访问冲突异常。为什么?

Strcat()引发访问冲突异常。为什么?,c,C,每次运行此命令时,都会出现以下异常:“访问冲突写入位置”。filenamecorrent是一个指针,而不是保存字符的变量,而是指向内存中分配用于保存字符的某个区域的指针。在第二行中,您将重新指定filenamecorrent,以指向作为代码一部分编译的字符串,因此无法更改,因此出现错误 您需要的是将字符串“correct”复制到内存中的分配区域。因此,请使用: int verify(char filename[], int filenameLength) // If f.ex. filename

每次运行此命令时,都会出现以下异常:“访问冲突写入位置”。

filenamecorrent
是一个指针,而不是保存字符的变量,而是指向内存中分配用于保存字符的某个区域的指针。在第二行中,您将重新指定
filenamecorrent
,以指向作为代码一部分编译的字符串,因此无法更改,因此出现错误

您需要的是将字符串
“correct”
复制到内存中的分配区域。因此,请使用:

int verify(char filename[], int filenameLength) // If f.ex. filename is "x.txt" then filenameLength is 5
{
    char* filenameCorrect = malloc(sizeof(char) * (filenameLength + 9));
    filenameCorrect = "correct_";
    strcat(filenameCorrect, filename);

    ...
}

然后您可以安全地使用strcat

filenamecorrent
是一个指针,而不是一个保存字符的变量,而是指向内存中分配用于保存字符的某个区域的指针。在第二行中,您将重新指定
filenamecorrent
,以指向作为代码一部分编译的字符串,因此无法更改,因此出现错误

您需要的是将字符串
“correct”
复制到内存中的分配区域。因此,请使用:

int verify(char filename[], int filenameLength) // If f.ex. filename is "x.txt" then filenameLength is 5
{
    char* filenameCorrect = malloc(sizeof(char) * (filenameLength + 9));
    filenameCorrect = "correct_";
    strcat(filenameCorrect, filename);

    ...
}

然后您就可以安全地使用strcat了-->
strcpy(文件名正确,“正确”)
出于安全考虑,您应该检查malloc的结果,以查看是否将
NULL
作为错误返回-->
strcpy(文件名正确,“正确”)
出于安全考虑,您应该检查
malloc
的结果,以查看是否将
NULL
作为错误返回