Keil C编译器中的strcpy和strcat

时间:2016-07-28 19:51:05

标签: c printf malloc strcpy keil

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

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[]并且我改变了,但问题仍然存在。

2 个答案:

答案 0 :(得分:4)

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

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

    char* noFilledStr = malloc(number_of_bytes);
    
  2. arr中的字符串为char[4],而不是char[3](不要忘记空字节!)。 tmp太小而无法容纳它们,因此strcpy(tmp, arr[i])写出了界限。

答案 1 :(得分:3)

您正在尝试构建要在nofilledStr指向的位置返回的字符串,但是此指针指向某处,因为您没有初始化它。如果您不必处理多个线程,则可以使用足够大的静态char[]数组。否则,请使用malloc()并在调用者完成后要求调用者free()返回的字符串。