LinuxSir.cn,穿越时空的Linuxsir!

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

入门级字符串问题~!

[复制链接]
发表于 2003-8-31 20:33:11 | 显示全部楼层 |阅读模式
int main(void){
    char *str1;
    char *str2;
    str1="GET /index.html HTTP/1.1";
    str2=strstr(str1," HTTP");
    str2='\0';
    return 1;
}
我希望的结果是str1的值是“index.htm”
但是gcc在str2='\0';报错。
怎么办~
发表于 2003-8-31 21:59:09 | 显示全部楼层
str2='\0'是否应为str2="\0"?
发表于 2003-8-31 22:03:35 | 显示全部楼层

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(void){
  4.         char str1[] = "GET /index.html HTTP/1.1";
  5.         // printf ("str1: %s\n", str1);

  6.         char * str2;
  7.         str2 = strstr(str1," HTTP");
  8.         // printf ("str2: %s\n", str2);
  9.         
  10.         strncpy (str2, "\0", 1);      // 用字符串替换
  11.         // printf ("str2: %s\n", str2);
  12.         // printf ("str1: %s\n", str1);
  13.         return 1;
  14. }
复制代码
发表于 2003-8-31 22:12:13 | 显示全部楼层
此程序的str1内容没有改变,str2的内容先是HTTP/1.1,再变为空。
bash: 此程序的str1内容没有改变,str2的内容先是HTTP/1.1,再变为空。: 没有那个文件或目录
yu1@debian:~/c++$ strstr()的功能是在str1中找到与子串相符的第一个指针。如下:
bash: syntax error near unexpected token `的功能是在str1中找到与子串相符的第一个指针。
发表于 2003-8-31 22:19:32 | 显示全部楼层
对呀! 我机器上编译通过了。
字符串操作我也不熟悉,看了一下函数原型,随手找了个 strncp() 充数。
下面可以参考一下:
http://www.ggv.com.cn/forum/clib/string/strstr.html
发表于 2003-8-31 22:22:47 | 显示全部楼层
quanliking的程序中str1最后为:GET /index.html
发表于 2003-8-31 22:29:13 | 显示全部楼层
要实现 index.html 也可以,就是不明白到底要实现何功能,如果想得到 index.html 直接定义一个字符串就可以了呀!如:
char *str1 = "index.html";
发表于 2003-8-31 22:36:03 | 显示全部楼层

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(void){
  4.         char str1[] = "GET /index.html HTTP/1.1";
  5.         printf ("str1: %s\n", str1);

  6.         char *str2;
  7.         str2 = strstr(str1," HTTP");
  8.         printf ("str2: %s\n", str2);

  9.         *str2 = '\0';
  10.         printf ("str2: %s\n", str2);
  11.         printf ("str1: %s\n", str1);
  12.         return 1;
  13. }
复制代码

刚才试了一下,改成上面也可以。
发表于 2003-8-31 22:43:45 | 显示全部楼层

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(void){
  4.         char *str1 = "GET /index.html HTTP/1.1";
  5.         printf ("str1: %s\n", str1);

  6.         char *str2;
  7.         str2 = strstr(str1," HTTP");
  8.         printf ("str2: %s\n", str2);

  9.         *str2 = '\0';
  10.         printf ("str2: %s\n", str2);
  11.         printf ("str1: %s\n", str1);
  12.         return 1;
  13. }
复制代码

用 char *str1 = "GET /index.html HTTP/1.1";
编译通过,运行就发生段错误:
str1: GET /index.html HTTP/1.1
str2:  HTTP/1.1
段错误
看来 char *str1 和 char str1[] 的实现稍不同。
有人解释一下吗?
发表于 2003-8-31 22:48:20 | 显示全部楼层
这个程序的原意可能是取“中间段”。
所以还差去头的部分。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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