C应用程序落在strcat上

时间:2012-03-02 14:34:48

标签: c strcat

当我跟随strcat发出任何想法时,我的申请会失败吗?

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

5 个答案:

答案 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()*encryptedLineencryptedLine[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的指针分配一些内存,这个程序就不会崩溃。