sprintf使用参数 %s 时,是把字符串放到指定的缓冲区,字符串要以“/0”结尾,否则会导致不可预料的行为。
如这些:
char name[20]; char temp1[5] = "abcde"; memset(name,0,sizeof(name)); sprintf(name,"%s ",temp1);
name里面可能是“abcde”,也可能是“abcde”后面跟着乱码。原因是temp1字符数组里面没有“/0”来结尾,然后指针不停加,就随便指到一块内存,再把内存里的内容拷贝到name里面去,有可能这个内存里面是“/0”,也有可能是乱七八糟的东西。这个问题值得注意啊。
把char temp1[5] = "abcde" 改成char *temp1 = "abcde" 要好些,指针的方式会自动在后面加“/0”,char temp[] = "abcde"不会在后面加“/0”。
sprintf(name,"%s","abcd")(第三个参数是常量时)会自动把“abcde”放到name里面后,在后面加“/0”。
printf也有一样的问题。
以上在Slickedit加gcc环境下测试。如果在vs .net 2005里面,char *temp1 = "abcde" 不会显示后面有“/0”。在se里面会temp1显示为数组,后面有“/0”