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