当我跟随strcat发出任何想法时,我的申请会失败吗?
char *encryptedLine[255] = {0};
char encryptedLString[8];
sprintf(encryptedLString, "%08lX", L);
strcat(*encryptedLine, encryptedLString);
答案 0 :(得分:3)
*encryptedLine
是NULL指针:它需要指向char
缓冲区。
*encyptedLine
相当于encryptedLine[0]
,这是char*
encryptedLine
数组中的第一个条目:
char *encryptedLine[255] = { 0 };
这是一个NULL指针。
要修复,请更改为:
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];
答案 1 :(得分:1)
encryptedLine是一个由255个指针初始化为NULL的数组。 * encryptedLine是一个NULL指针。您将NULL指针作为strcat的第一个参数传递,因此它失败。
答案 2 :(得分:1)
您尝试使用0作为第一个参数strcat()
。 *encryptedLine
为encryptedLine[0]
,您已为其分配了{0}
答案 3 :(得分:0)
您有一组char
指针
char *encryptedLine[255]
您尚未分配任何内存并将其分配给任何内存。崩溃。
答案 4 :(得分: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的指针分配一些内存,这个程序就不会崩溃。