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