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("rn 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指向的位置构建要返回的字符串,但由于您没有初始化它,因此该指针指向了某个位置。如果不必处理多个线程,则可以使用足够大的静态char[]数组。否则,使用malloc(),并要求调用方在处理完返回的字符串后使用free()

相关内容

  • 没有找到相关文章

最新更新