我用这段代码打印一些字符串,但它不打印任何东西。
有什么问题?
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[]
并且我改变了,但问题仍然存在。
答案 0 :(得分:4)
您没有为noFilledStr
分配任何内存,因此其值不确定且strcat(noFilledStr, tmp)
未定义。
使用malloc
分配内存并使用返回的指针初始化noFilledStr
:
char* noFilledStr = malloc(number_of_bytes);
arr
中的字符串为char[4]
,而不是char[3]
(不要忘记空字节!)。 tmp
太小而无法容纳它们,因此strcpy(tmp, arr[i])
写出了界限。
答案 1 :(得分:3)
您正在尝试构建要在nofilledStr
指向的位置返回的字符串,但是此指针指向某处,因为您没有初始化它。如果您不必处理多个线程,则可以使用足够大的静态char[]
数组。否则,请使用malloc()
并在调用者完成后要求调用者free()
返回的字符串。