请问下 sprintf 这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思?
Hi,
请问下面这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思?
sprintf(variable, "%s\0", value);
可以直接写成下面这样吗:
sprintf(variable, "%s", value);
请帮下忙解答一下。
[解决办法]
就是\0了呗
可以直接"%s"
[解决办法]
理论上是可以的,\0是字符串的结尾,sprintf把value放到variable里面,碰到value里的\0结束,但如果一直没有\0,就会一直放,一直放……
这里的\0我实在看出出一点点点的作用,好像真的没啥用
[解决办法]
作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
#include <stdio.h>
int main(void)
{
char value[4]="abcd";//注意,此时value没有'\0'结束符,VC下结果会出问题。
char variable[6]="12345";
sprintf(variable, "%s", value);
printf("variable=%s\n",variable);
return 0;
}
[解决办法]
这里的"\0"是多余的,sprintf函数会自动补上字符串结束字符'\0'。