Mr丶张 发表于 2020-3-6 18:55:09

关于指针的问题

#include <stdio.h>
2
3 int main()
4 {
5         char a = "qwert";
6         char *p = a;
7
8         printf("%s",p);
9
10         return 0;
11 }

这个为什么输出是段错误呢??

qiuyouzhi 发表于 2020-3-6 18:57:21

char *p = &a

major_lyu 发表于 2020-3-6 19:03:43

本帖最后由 major_lyu 于 2020-3-6 19:08 编辑

p是个字符’e'。
要打印p及之后的字符组成的字符串应该给的是字符串要打印的字符串的首字符地址,而不是字符。
printf("%s", &p);
或者
printf("%s", p+2);

Mr丶张 发表于 2020-3-6 19:05:23

qiuyouzhi 发表于 2020-3-6 18:57


warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
char *p = &a;
报错了

major_lyu 发表于 2020-3-6 19:08:46

Mr丶张 发表于 2020-3-6 19:05
warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
char *p = ...

char *p=a;是对的,a表示的就是字符数组的首地址。

Mr丶张 发表于 2020-3-6 19:09:10

major_lyu 发表于 2020-3-6 19:03
p是个字符’e'。
要打印p及之后的字符组成的字符串应该给的是字符串要打印的字符串的首字符地址,而 ...

好的 谢谢

Mr丶张 发表于 2020-3-6 19:14:15

major_lyu 发表于 2020-3-6 19:03
p是个字符’e'。
要打印p及之后的字符组成的字符串应该给的是字符串要打印的字符串的首字符地址,而 ...

那要怎么打印第二个字符之前的字符串呢?

major_lyu 发表于 2020-3-6 19:23:03

Mr丶张 发表于 2020-3-6 19:14
那要怎么打印第二个字符之前的字符串呢?

用%s打印字符串,会打印到字符串的结束字符’\0'处停止。而你要打印第二个字符之前的字符,由于没有‘\0'这样的字符做结束标志,所以只能用for循环了

for(int i = 0; i<2; i++)
{
    printf("%c", *(p+i));
}
页: [1]
查看完整版本: 关于指针的问题