LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: nicosoft

入门级字符串问题~!

[复制链接]
发表于 2003-8-31 22:54:40 | 显示全部楼层

[code]
        str2 = strstr(str1,"index");
        printf ("str2: %s\n", str2);
        strcpy (str1, str2);
        printf ("str2: %s\n", str2);
        printf ("str1: %s\n", str1);
        
[/code]
发表于 2003-8-31 23:03:27 | 显示全部楼层

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

  6.         char *pstr1;
  7.         char *pstr2;
  8.         pstr1 = strstr(str, "index");
  9.         printf ("pstr1: %s\n", pstr1);
  10.         str = strdup(pstr1);          // 字符串拷贝,截头
  11.         printf ("str: %s\n", str);
  12.         pstr2 = strstr(str, " HTTP");
  13.         printf ("str2: %s\n", pstr2);

  14.         *pstr2 = '\0';                // 截尾
  15.         printf ("str2: %s\n", pstr2);
  16.         printf ("str1: %s\n", str);
  17.         return 1;
  18. }
复制代码
                                                                           
                                                                               感觉 C 操作字符串中不爽呀!估计水平太差原故。
发表于 2003-8-31 23:08:42 | 显示全部楼层
最初由 yjmsir 发表

[code]
        str2 = strstr(str1,"index");
        printf ("str2: %s\n", str2);
        strcpy (str1, str2);
        printf ("str2: %s\n", str2);
        printf ("str1: %s\n", str1);
        
[/code]


strcpy (str1, str2) 本来也想用这个,可是出现段错误,不知兄弟的源码如何?
发表于 2003-8-31 23:20:26 | 显示全部楼层
用 strcpy 也成了。

  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,"index");
  8.         printf ("str2: %s\n", str2);
  9.         strcpy (str1, str2);
  10.         printf ("str2: %s\n", str2);
  11.         printf ("str1: %s\n", str1);

  12.         str2 = strstr(str1," HTTP");
  13.         printf ("str2: %s\n", str2);

  14.         *str2 = '\0';
  15.         printf ("str2: %s\n", str2);
  16.         printf ("str1: %s\n", str1);
  17.         return 1;
  18. }
复制代码

原来就是 char * str1 和 char str1[] 惹得祸。

仔细看了一下,结果很有意思。显然事先都知道只有 str1 这一组字符串,str2 是指向字符串中间某个字符的指针,来看看结果:
str1: GET /index.html HTTP/1.1
str2: index.html HTTP/1.1
str2: .html HTTP/1.1           // 用了 strcpy(str1,str2) 后的结果
str1: index.html HTTP/1.1
str2:  HTTP/1.1
str2:
str1: index.html
看得出来,strcpy 以后,str2 也发生了变化,我想并不是 str2 指得位置变化了,而是 str1 中的字符向前移动了 5 个字符,str2 总是相对偏离 str1 5 个字符的位置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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