这面这种情况如何处理?
float t = 2;
char TLP[] = "";
sprintf(TLP,"%d",(uint8_t)t * 10);
char * GMS[] = {"aaa","bbb","","ccc"};
GMS[2] = &TLP[0];
char zzz[] = "zzz";
for(int i=0;i<4;i++)
{
char RUN[] = "";
strcat(RUN, (const char *)zzz);
strcat(RUN, (const char *)GMS[i]);
strcat(RUN, "\n");
printf((const char *)RUN);
}
期待结果是依次输出了符串,
zzzaaa
zzzbbb
zzz20(这行不能正确显示,其它行都正确)
zzzccc
c语言字符串后面都自动跟一个"\0"作为字符串截止符。而GMS[2]指向的内存块中,是TLP,也即sprintf过去的内容,存入的是格式化成字符串的整数20。我记得sprintf不会自动加"\0"的,你需要手动加上。