1.字符串指针 在c 语言中,有两种方式访问一个字符串
1)字符数组 - char str[] = "I am amos!";
- printf("%s\n",str);
复制代码
2)字符串指针指向字符串 - Char *变量名 = “字符串内容”; //字符串内容是常量
- Char *str = “abbc”;//存的是字符串常量的首地址
- Char ch = 'b';
- Char *p = &ch;//字符指针
复制代码
【字符串指针变量的定义说明】与【指向字符变量的指针变量说明】是相同的,只能按【指针变量的赋值】不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。
3)字符数组与字符串指针的不同 - char *str = "I am amos!";
- char str2[] = "I am amos!";
-
- str2[2] = 'n';
- str[2] = 'n';//运行时报错,因为字符串是常量,不可修改
- printf("%s,sizeof(str) = %ld\n",str,sizeof(str));//因为在同一个编译器下所有类型的指针在内存中占用的字节数都是相同的
- printf("%s,sizeof(str2) = %ld\n",str2,sizeof(str2));//可以得出整个字符串的长度
-
复制代码
打印结果: I am amos!,sizeof(str) = 8 I am amos!,sizeof(str2) = 11
4)妙用字符串指针 将指针变量指向一个格式字符串,用在printf函数中,用于输出二维数组的各种地址表示的值,但在printf语句中用指针变量PF代替了格式串,这也是程序中常用的方法 例如: - char *str = "I am amos!";
- char str2[] = "I am amos!";
- char *PF = "%s, sizeof(str) = %ld\n";
- printf(PF,str,sizeof(str));
- printf(PF,str2,sizeof(str2));
复制代码
5)不能接受从键盘的输入 例1: - char *str;
- scanf("%s",str);//编译通过,运行时报错,此时str是野指针
- 例2:
- char *str = NULL;
- scanf("%s",str);//编译通过,运行时报错,此时str未被分配空间
-
- 例3:
- char *str = NULL;
- str = malloc(100);//给str申请了100个字节的内存空间
- scanf("%s",str);
- printf("%s",str);
复制代码
打印结果: abcdefg abcdefg
|