C语言:字符串数组含有动态字符串成员如何处理?

这面这种情况如何处理?

  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

阅读 1.5k
1 个回答

c语言字符串后面都自动跟一个"\0"作为字符串截止符。而GMS[2]指向的内存块中,是TLP,也即sprintf过去的内容,存入的是格式化成字符串的整数20。我记得sprintf不会自动加"\0"的,你需要手动加上。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏