【c语言】string

  c语言中有没有string呢?

  今天晚饭时,突然和同学聊起这个。我们四个人,我说没有,因为我彷佛在某本书上看到过这个问题,但是他们都说有,并提了一个连我也信服的论据,就是c中有string.h这个头文件。即使心存疑虑,在座中基础最差的我,也选择相信了c是有string的,毕竟我看见过string.h这个头文件。

  回来上网查资料,却发现是c语言没有string的,至于c语言中的string头文件,是对字符指针和字符数组进行操作的。手头正好有《THE STANDARD C LIBRARY》这书,抄录一个我极为喜欢的短小精悍却功能强大的strcpy函数来说明这个问题。

  strcpy.c的内容:

  #include  <string.h>

  char *(strcpy)(char * s1,const char *s2)

  {

      char * s =s1;

    for (s =s1;(*s++ = *s2++) !='\0';)

      ;

    return (s1);

   }

  c语言中string.h文件的内容有两类,一是某些特殊常量的宏定义,此处不再赘述;另一类是string库的所有函数声明,例如里面有strcpy函数的声明 char *strcpy(char*,const char*);

  回头来看,我很好奇为什么常发生这样的错觉呢?

  想了想,可能和C++有关系,这家伙从名字来看,像极了C,并且某些功能也酷似C。学过C++的人,大概都用过string类,用它来处理文件,非常方便,省去了使用字符数组存储字符串的许多麻烦。

  例如,在C++中,存一个字符串"string does not exist in c programm lanuage"。

  在C++中,如果使用字符数组,并且这样写:char a[10] = "string does not exist in c programm lanuage";然后编译,编译器会报错。为什么,数组越界了。越界了意味着数组a长度不是10,而应是"string does not exist in c programm lanuage"这个字符串的长度再加1。然后就要开始数这串像老太婆的裹脚布一样长的字符串了。而使用string就完全不用担心这些,只要写上一条 string a ="string does not exist in c programm lanuage";就行了。

  string好用,C++和C语言中都有字符处理,所以容易让人混淆。

  如果想在C中实现类似string的功能,请使用char *字符指针,而不是string a这种形式,因为c中没有string这个类型。

你可能感兴趣的:(String)