当我对 strcat 进行以下调用时,我的应用程序崩溃了,为什么?
char *encryptedLine[255] = {0};
char encryptedLString[8];
sprintf(encryptedLString, "%08lX", L);
strcat(*encryptedLine, encryptedLString);
*encryptedLine
是NULL指针:它需要指向一个char
缓冲区。
*encyptedLine
等价于encryptedLine[0]
,它是 的数组中的第一个条目char*
encryptedLine
:
char *encryptedLine[255] = { 0 };
这是一个空指针。
要修复,请更改为:
char encryptedLine[255] = { 0 };
strcat(encryptedLine, encryptedString);
或者:
encryptedLine[0] = malloc(255);
strcat(*encryptedLine, encryptedString);
我认为您还需要将大小增加encryptedLString
1 为:
sprintf(encryptedLString, "%08lX", L);
将尝试写入 9 个字符:格式指定的 8 个字符加上空终止符的 1 个字符:
char encryptedLString[9];
encryptedLine 是一个由 255 个指针组成的数组,初始化为 NULL。*encryptedLine 是一个 NULL 指针。您将 NULL 指针作为第一个参数传递给 strcat,因此它失败了。
您正在尝试strcat()
使用 0 作为第一个参数。*encryptedLine
是encryptedLine[0]
和你分配{0}
给它
你有一个char
指针数组
char *encryptedLine[255]
您尚未分配任何内存并将其分配给其中任何一个。碰撞。
/* LINE 1*/ char *encryptedLine[255] = {0};
char encryptedLString[8];
sprintf(encryptedLString, "%08lX", L);
strcat(*encryptedLine, encryptedLString);
查看 LINE1,它分配了一个包含 255 个指向 char 的指针的数组,这些指针全部初始化为 0,然后执行 strcat,它将尝试将 encryptedLString 中的值写入指针 *encryptedLine 指向的位置,该位置为 NULL,这不允许。
只需为 encryptedLine 的指针分配一些内存,这个程序就不会崩溃。