阅读背景:

请问下 sprintf 这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思?

来源:互联网 
Hi,

请问下面这句,里面的 %s
Hi,

请问下面这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思? 

sprintf(variable, "%s\0", value);

可以直接写成下面这样吗:

sprintf(variable, "%s", value);

请帮下忙解答一下。

15 个解决方案

#1


就是\0了呗
可以直接"%s"

#2


如果可以直接 %s 来取 value 的值,那还要加上 \0 做什么??????

#3


引用 2 楼  的回复:
如果可以直接 %s 来取 value 的值,那还要加上 \0 做什么??????

这个你该问写这个代码的人。反正我是没见过这么加\0的

#4


引用楼主  的回复:
Hi,

请问下面这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思? 

sprintf(variable, "%s\0", value);

可以直接写成下面这样吗:

sprintf(variable, "%s", value);

请帮下忙解答一下。

理论上是可以的,\0是字符串的结尾,sprintf把value放到variable里面,碰到value里的\0结束,但如果一直没有\0,就会一直放,一直放……
这里的\0我实在看出出一点点点的作用,好像真的没啥用

#5


\0表示的是字符串结尾,这里没用

#6


挺多余的

#7


sprintf会自动加\0收尾的吧

#8


作用是在字符串结尾添加'\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;
}

#9


脱裤子放屁

#10


引用 8 楼  的回复:
作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code

#include <st……


谢谢,应该是这个答案。

#11


多虑了。。。

#12


这里的"\0"是多余的,sprintf函数会自动补上字符串结束字符'\0'。

#13


引用 8 楼  的回复:
作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code

#include <st……

字符串都已\0结束,没有\0的字符串已经是错误了。

#14


呵呵,好像确实是这样,我误人了,罪过....
引用 13 楼  的回复:
引用 8 楼 的回复:

作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code
……

#15


引用 14 楼 tongzhipeng5699 的回复:
呵呵,好像确实是这样,我误人了,罪过....
[Quote=引用 13 楼  的回复:]
引用 8 楼 的回复:

作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code
……

不一定误人了啊,万一是这样呢:
sprintf(str, "this is a string:%s and a int: %d", str_p, i);

 字符串中后面的 "
Hi,

请问下面这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思? 

sprintf(variable, "%s\0", value);

可以直接写成下面这样吗:

sprintf(variable, "%s", value);

请帮下忙解答一下。

15 个解决方案

#1


就是\0了呗
可以直接"%s"

#2


如果可以直接 %s 来取 value 的值,那还要加上 \0 做什么??????

#3


引用 2 楼  的回复:
如果可以直接 %s 来取 value 的值,那还要加上 \0 做什么??????

这个你该问写这个代码的人。反正我是没见过这么加\0的

#4


引用楼主  的回复:
Hi,

请问下面这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思? 

sprintf(variable, "%s\0", value);

可以直接写成下面这样吗:

sprintf(variable, "%s", value);

请帮下忙解答一下。

理论上是可以的,\0是字符串的结尾,sprintf把value放到variable里面,碰到value里的\0结束,但如果一直没有\0,就会一直放,一直放……
这里的\0我实在看出出一点点点的作用,好像真的没啥用

#5


\0表示的是字符串结尾,这里没用

#6


挺多余的

#7


sprintf会自动加\0收尾的吧

#8


作用是在字符串结尾添加'\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;
}

#9


脱裤子放屁

#10


引用 8 楼  的回复:
作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code

#include <st……


谢谢,应该是这个答案。

#11


多虑了。。。

#12


这里的"\0"是多余的,sprintf函数会自动补上字符串结束字符'\0'。

#13


引用 8 楼  的回复:
作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code

#include <st……

字符串都已\0结束,没有\0的字符串已经是错误了。

#14


呵呵,好像确实是这样,我误人了,罪过....
引用 13 楼  的回复:
引用 8 楼 的回复:

作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code
……

#15


引用 14 楼 tongzhipeng5699 的回复:
呵呵,好像确实是这样,我误人了,罪过....
[Quote=引用 13 楼  的回复:]
引用 8 楼 的回复:

作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code
……

不一定误人了啊,万一是这样呢:
sprintf(str, "this is a string:%s and a int: %d", str_p, i);

" 是什么意思?  请问下面这句,里面的 %s
Hi,

请问下面这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思? 

sprintf(variable, "%s\0", value);

可以直接写成下面这样吗:

sprintf(variable, "%s", value);

请帮下忙解答一下。

15 个解决方案

#1


就是\0了呗
可以直接"%s"

#2


如果可以直接 %s 来取 value 的值,那还要加上 \0 做什么??????

#3


引用 2 楼  的回复:
如果可以直接 %s 来取 value 的值,那还要加上 \0 做什么??????

这个你该问写这个代码的人。反正我是没见过这么加\0的

#4


引用楼主  的回复:
Hi,

请问下面这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思? 

sprintf(variable, "%s\0", value);

可以直接写成下面这样吗:

sprintf(variable, "%s", value);

请帮下忙解答一下。

理论上是可以的,\0是字符串的结尾,sprintf把value放到variable里面,碰到value里的\0结束,但如果一直没有\0,就会一直放,一直放……
这里的\0我实在看出出一点点点的作用,好像真的没啥用

#5


\0表示的是字符串结尾,这里没用

#6


挺多余的

#7


sprintf会自动加\0收尾的吧

#8


作用是在字符串结尾添加'\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;
}

#9


脱裤子放屁

#10


引用 8 楼  的回复:
作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code

#include <st……


谢谢,应该是这个答案。

#11


多虑了。。。

#12


这里的"\0"是多余的,sprintf函数会自动补上字符串结束字符'\0'。

#13


引用 8 楼  的回复:
作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code

#include <st……

字符串都已\0结束,没有\0的字符串已经是错误了。

#14


呵呵,好像确实是这样,我误人了,罪过....
引用 13 楼  的回复:
引用 8 楼 的回复:

作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code
……

#15


引用 14 楼 tongzhipeng5699 的回复:
呵呵,好像确实是这样,我误人了,罪过....
[Quote=引用 13 楼  的回复:]
引用 8 楼 的回复:

作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code
……

不一定误人了啊,万一是这样呢:
sprintf(str, "this is a string:%s and a int: %d", str_p, i);

 字符串中后面的 "
Hi,

请问下面这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思? 

sprintf(variable, "%s\0", value);

可以直接写成下面这样吗:

sprintf(variable, "%s", value);

请帮下忙解答一下。

15 个解决方案

#1


就是\0了呗
可以直接"%s"

#2


如果可以直接 %s 来取 value 的值,那还要加上 \0 做什么??????

#3


引用 2 楼  的回复:
如果可以直接 %s 来取 value 的值,那还要加上 \0 做什么??????

这个你该问写这个代码的人。反正我是没见过这么加\0的

#4


引用楼主  的回复:
Hi,

请问下面这句,里面的 %s\0 字符串中后面的 "\0" 是什么意思? 

sprintf(variable, "%s\0", value);

可以直接写成下面这样吗:

sprintf(variable, "%s", value);

请帮下忙解答一下。

理论上是可以的,\0是字符串的结尾,sprintf把value放到variable里面,碰到value里的\0结束,但如果一直没有\0,就会一直放,一直放……
这里的\0我实在看出出一点点点的作用,好像真的没啥用

#5


\0表示的是字符串结尾,这里没用

#6


挺多余的

#7


sprintf会自动加\0收尾的吧

#8


作用是在字符串结尾添加'\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;
}

#9


脱裤子放屁

#10


引用 8 楼  的回复:
作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code

#include <st……


谢谢,应该是这个答案。

#11


多虑了。。。

#12


这里的"\0"是多余的,sprintf函数会自动补上字符串结束字符'\0'。

#13


引用 8 楼  的回复:
作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code

#include <st……

字符串都已\0结束,没有\0的字符串已经是错误了。

#14


呵呵,好像确实是这样,我误人了,罪过....
引用 13 楼  的回复:
引用 8 楼 的回复:

作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code
……

#15


引用 14 楼 tongzhipeng5699 的回复:
呵呵,好像确实是这样,我误人了,罪过....
[Quote=引用 13 楼  的回复:]
引用 8 楼 的回复:

作用是在字符串结尾添加'\0'结束符
但是gcc下的sprintf会自动追加'\0',所以此时是多余的
vc编译器下的sprintf不会自动追'\0',但是如果你的value一般已经有'\0'结束符,复制的时候会将这个'\0'复制到新的字符串中,所以大多数时候也是多余的,当然也有例外,如果value没有'\0',此时在VC下就会出现乱码了
C/C++ code
……

不一定误人了啊,万一是这样呢:
sprintf(str, "this is a string:%s and a int: %d", str_p, i);




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: