Keil C 编译器中的 strcpy 和 strcat

strcpy and strcat in Keil C compiler

我用这段代码打印了一些字符串,但它没有打印任何东西。
有什么问题?

char* getNotFilledEncryptionParams(void)
{
    char* nofilledStr;
    char tmp[3];
    const char * arr[]= {" P,"," Q,"," A,"," B,"," C,"," R,"," S0,","S1,","S2,","F1,","G1"};


   for(i=0;i<11;i++)
   {
      if(filledParams[i] == 0)
      {
        strcpy(tmp,arr[i]);
        strcat(nofilledStr,tmp);
      }
   }

return nofilledStr;
}

用法:

int main(void){

    char *remaining;

    remaining = getNotFilledEncryptionParams();
    printf("\r\n Remaining item:%s",remaining);

}

我觉得是const char * arr[]的问题,我改了,问题依旧

  1. 您没有为 noFilledStr 分配任何内存,因此它的值是不确定的并且 strcat(noFilledStr, tmp) 是未定义的。

    使用malloc分配内存并用返回的指针初始化noFilledStr

    char* noFilledStr = malloc(number_of_bytes);
    
  2. arr中的字符串是char[4],而不是char[3](不要忘记空字节!)。 tmp 太小放不下,所以 strcpy(tmp, arr[i]) 写越界了。

您正试图在 nofilledStr 指向的位置构建 return 的字符串,但由于您未对其进行初始化,此指针指向某处。如果您不必处理多个线程,则可以使用足够大的静态 char[] 数组。否则,使用 malloc() 并要求调用者在完成后 free() returned 字符串。