09 C语言字符串
创始人
2024-06-01 06:48:42

09 C语言字符串

1、字符串

char word[] = {‘H’,‘e’,‘l’,‘l’,‘o’};

这样只是字符数组,并不是字符串。

char word[] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘\0’};

  1. 字符串以空字符 ‘\0’ 结尾,这是字符串的结束标志。
  2. 字符串实际上是以字符数组的形式存在的,可以通过指针和数组的方式访问。
  3. 可以通过在字符数组的末尾添加空字符 ‘\0’ 来创建一个字符串。
  4. 也可以使用双引号 “” 来初始化字符串,例如:char str[] = “Hello, World!”;

2、字符串常量

  1. char *s = "Hello World"; 定义的 s 是一个指向字符串常量的指针,字符串常量存储在内存的代码段中,是只读不可修改的。因此,如果尝试通过 s 来修改字符串中的某个字符,会导致不可预测的行为。
  2. char s[] = "Hello World"; 定义的 s 是一个字符数组,存储在程序的堆栈中,是可以修改的。这里使用了字符数组的初始化方式,相当于将字符串常量 “Hello World” 中的每个字符复制到 s 中,最后添加一个空字符 ‘\0’ 作为结尾。因此,s 存储的是一个以空字符 ‘\0’ 结尾的字符串。
  3. 关于 char *s 的其他用法,char *s 定义的是一个指向字符型的指针,它可以指向字符数组的起始地址,也可以指向字符串常量的首地址,甚至可以指向任何一个 char 类型的变量或数组。在使用指针变量时,需要注意指针指向的地址是否合法,以及指针指向的内容是否可读写等问题。
  4. 关于字符串的定义,在 C 语言中,字符串是以空字符 ‘\0’ 结尾的字符数组。只有当字符数组的末尾是空字符 ‘\0’ 时,该字符数组才可以被视为字符串。如果字符数组的末尾不是空字符 ‘\0’,那么它只是一个普通的字符数组,而不是字符串。

3、字符串输入和输出

  1. 当使用 scanf 函数时,%7s 表示读取并存储长度为 7 的字符串,且在字符串后面添加一个空字符 ‘\0’,以确保该字符串在后续操作中是有效的。如果用户输入超过 7 个字符,则会将多余的字符留在输入缓冲区中,这些字符会在下一次读取时被读取。例如:
rustCopy codechar str[8];
scanf("%7s", str);

如果用户输入 “HelloWorld”,则只有前七个字符 “HelloWo” 被存储在 str 中,而 “rld” 会留在输入缓冲区中,等待下一次读取。

  1. 当使用 char *s 来表示字符串时,必须先为 s 分配内存并将其初始化,否则它只是一个未定义的指针,无法用于存储字符串。例如:
cCopy codechar *s = (char*) malloc(8 * sizeof(char)); // 为 s 分配内存
strcpy(s, "Hello"); // 将字符串 "Hello" 复制到 s 中

或者可以直接使用字符串常量初始化 s

char *s = "Hello";

在这种情况下,s 将指向一个存储在程序代码段中的字符串常量。需要注意的是,这种方式定义的字符串是只读的,无法修改字符串的内容。如果需要修改字符串,则需要使用数组来存储字符串。例如:

char s[] = "Hello";
s[0] = 'h'; // 将第一个字符 'H' 修改为 'h'

4、字符串数组

  1. char **a:表示 a 是一个指向指针的指针,通常用于表示二维字符数组。
  2. char a[][10]:表示 a 是一个二维字符数组,第二维的长度为 10,用于存储多个长度不超过 9 的字符串。
  3. char *a[]:表示 a 是一个指针数组,每个元素都是一个指向字符数组或字符串常量的指针,用于存储多个字符串。

5、单字符输入和输出

  • putchar()函数是用来输出一个字符到标准输出设备上的函数,其原型为int putchar(int c)。
  • putchar()函数返回值为成功写入标准输出设备的字符,或者在写入时发生错误返回EOF。
  • getchar()函数用于从标准输入设备(一般是键盘)获取一个字符,其原型为int getchar(void)。
  • getchar()函数返回值为读入标准输入设备的字符,或者在读取时发生错误返回EOF。

6、字符串函数

1、输出字符串长度

#include
#include
size_t mylen(const char * s){int index = 0;while(s[index] != '\0'){index++;}return index;
}
int main(int argc,char const *argv[]){char s[30] ="Hello";printf("mylen is %lu\n",mylen(s));return 0;
}

2、字符串比较

#include
#include
int mycmp(const char * s1,const char * s2){while(*s1 == *s2 && *s1 != '\0'){s1++;s2++;}return *s1 - *s2;
}
int main(int argc,char const *argv[]){char s1[] = "Abc";char s2[] = "abc";printf("%d\n",mycmp(s1,s2));return 0;
}

3、字符串拷贝

char *mycpy(char *dst,const char *src){char *ret = dst;while(*src){*dst++ = *src++;}return ret;
}

使用strncat和strncpy函数进行连接和拷贝会更加安全。

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...