【问题标题】:C application falling over on strcatC 应用程序在 strcat 上失败
【发布时间】:2012-03-02 14:34:47
【问题描述】:

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

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

【问题讨论】:

  • 你明白什么是 char *encryptedLine[255] 构造吗?你在 sprintf 中使用的 L 是什么?
  • *encryptedLine[255] - 你想做什么?
  • 所有反对票是怎么回事?我清楚地提供了足够的信息来回答问题?

标签: c strcat


【解决方案1】:

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

【讨论】:

  • 你的意思是我应该删除 = {0} 吗?这似乎不起作用
  • 您很可能要删除 *
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      你有一个char数组指针

      char *encryptedLine[255]
      

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

      【讨论】:

        【解决方案5】:
        /* 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 的指针分配一些内存,这个程序就不会崩溃。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-19
          • 1970-01-01
          • 2021-12-17
          • 1970-01-01
          • 1970-01-01
          • 2012-11-25
          • 2012-01-02
          • 2016-02-05
          相关资源
          最近更新 更多