-3

当我对 strcat 进行以下调用时,我的应用程序崩溃了,为什么?

char *encryptedLine[255] = {0};  
char encryptedLString[8];        
sprintf(encryptedLString, "%08lX", L);
strcat(*encryptedLine, encryptedLString);  
4

5 回答 5

3

*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);

我认为您还需要将大小增加encryptedLString1 为:

sprintf(encryptedLString, "%08lX", L);

将尝试写入 9 个字符:格式指定的 8 个字符加上空终止符的 1 个字符:

char encryptedLString[9];
于 2012-03-02T14:37:08.397 回答
1

encryptedLine 是一个由 255 个指针组成的数组,初始化为 NULL。*encryptedLine 是一个 NULL 指针。您将 NULL 指针作为第一个参数传递给 strcat,因此它失败了。

于 2012-03-02T14:37:43.233 回答
1

您正在尝试strcat()使用 0 作为第一个参数。*encryptedLineencryptedLine[0]和你分配{0}给它

于 2012-03-02T14:37:56.497 回答
0

你有一个char 指针数组

char *encryptedLine[255]

您尚未分配任何内存并将其分配给其中任何一个。碰撞。

于 2012-03-02T14:37:57.570 回答
0
/* 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 的指针分配一些内存,这个程序就不会崩溃。

于 2012-03-02T14:46:32.093 回答