如何用sprintf直接连接两个字符串

默认分类 · 2012-03-11

呃,sprintf功能很强大,能连接任何格式的任何变量到一起,然后我用它来直接连接(或叫合并)两个字符串的时候,发现得不到正确的结果,然后呢?

1、错误做法1

int main ()
{
  char * a1 = "shengruxiahua,siruzhaolu";
  char * a2 = "wo ai beijing tian an men";
  char * s;
  s = malloc ( 10000 );
  sprintf (s,"%s%s",a1,a2);
  printf ("the s is %s\n",s);
  return 0;
}

这样得不到正确结果,原因我不是很清楚了。

2、错误做法2

int main ()
{
  char * a1 = "shengruxiahua,siruzhaolu";
  char * a2 = "wo ai beijing tian an men";
  char * s;
  s = malloc ( 10000 );
  sprintf (s,"%.*s%.*s",sizeof(a1),a1,sizeof(a2),a2);
  printf ("the s is %s\n",s);
  return 0;
}

这样也得不到正确的结果,因为sizeof(a1)结果为4,仅表示a1首地址的大小,就是4个字节啦。

3、正确做法

int main ()
{
  char * a1 = "shengruxiahua,siruzhaolu";
  char * a2 = "wo ai beijing tian an men";
  char * s;
  s = malloc ( 10000 );
  sprintf (s,"%.*s%.*s",strlen(a1),a1,strlen(a2),a2);
  printf ("the s is %s\n",s);
  return 0;
}

这样就能把a1和a2这两个字符串直接连接到一起了。

编程 c语言
Theme Jasmine by Kent Liao