LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 851|回复: 5

strcpy问题,出现类型不匹配

[复制链接]
发表于 2003-10-1 10:57:34 | 显示全部楼层 |阅读模式
设置:char req[8192];
      *t3 = "HTTP/1.0";
想法:将t3加上一个空格,即"HTTP/1.0 "写入req中,使用strcpy()
写法:

  1.       t3 = req;
  2.       char t[] = " ";
  3.       req = strcpy (req, t);
  4.       
复制代码

错误:类型不匹配。
请帮忙看看。
发表于 2003-10-1 11:26:31 | 显示全部楼层
很不明白你的意思,你要在某个字符串后面加上一个空格,用strcat把它与一个“空格”连接起来不就好吗?

如果你要把连接后的字符串放在另个一个字符串变量中,那就先把未连接前的字符串复制到那个要连接的字符串,再在这个字符串后面加一个空格。
发表于 2003-10-1 12:32:33 | 显示全部楼层

回复: strcpy问题,出现类型不匹配

最初由 edwardhayes 发表
设置:char req[8192];
      *t3 = "HTTP/1.0";
想法:将t3加上一个空格,即"HTTP/1.0 "写入req中,使用strcpy()
写法:

  1.       t3 = req;
  2.       char t[] = " ";
  3.       req = strcpy (req, t);
  4.       
复制代码

错误:类型不匹配。
请帮忙看看。


为什么要在 t3 所指的字符串尾部追加空格呢,能讲一下用意吗?

*t3 = "HTTP/1.0";  这是个语法错误。
*t 表示指针 t 所指的对象,就变成了给该对象的赋值语句。显然直接把字符串赋给某个对象在 c 还没有这种功能,需要用 strcpy 或 memcpy(c++ 倒有个 string 类可以实现)。我想这里你也不是这个意图。
正确应该是:
t3 = "HTTP/1.0";
表示让指针 t3 指向字符串 “Http/1.0" 的首地址。
或在定义指针 t3 时,用初始化语句:
char *t3 = "HTTP/1.0";


  1. t3 = req;
  2. char t[] = " ";
  3. req = strcpy (req, t);
复制代码

就更看不明白了。
t3 = req;  表示让指针 t3 指向数组 req, 即指向数组 req 的首个字符,而本来它是指向字符串 "HTTP/1.0" 的,你让它指向了不该指的对象。
下面的语句就毫无意义了。

正确的方法:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char req[8192];
  5.         char *t3 = "HTTP/1.0 ";

  6.         strcpy (req, t3);

  7.         printf("%s\n", req);

  8.         return 0;
  9. }
复制代码


或按你的要求:
  1. include <stdio.h>

  2. int main()
  3. {
  4.         char req[8192];
  5.         char *t3 = "HTTP/1.0";

  6.         strcpy (req, t3);
  7.         strcat (req," ");

  8.         printf("%s\n", req);

  9.         return 0;
  10. }
复制代码




  1. include <stdio.h>

  2. int main()
  3. {
  4.         char req[8192];

  5.         strcpy (req, "HTTP/1.0 ");

  6.         printf("%s\n", req);

  7.         return 0;
  8. }
复制代码


具体函数说明请看:
http://www.cplusplus.com/ref/cstring/index.html
发表于 2003-10-1 12:48:59 | 显示全部楼层
char *t3= "http 1.0"
这是一个c写法 C中类型检查不严格 所以不会报错
在c++中应该写成
const char* t3 = "http 1.0";
因为T3是const(在c中也是const 只是你可以不写) 所以修改它会报错
发表于 2003-10-1 13:32:05 | 显示全部楼层
同意。
 楼主| 发表于 2003-10-1 13:37:53 | 显示全部楼层
Thank you all!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表