为什么在C中打印字符而不在字符串时使用星号作为指针?

查克·德里斯(Chuck Dries)

好吧,我有两个问题,两个问题都是基于我的教授提供的相同示例代码片段:

char arr[3][3] = {
        { '0', '1', '2' },
        { '3', '4', '5' },
        { '6', '7', '\0' }
};
char* base = &arr[0][0], *a = &arr[0][0];
a = base + 5;
printf("base=%d a=%d", base, a);
printf("*a = %c ", *a); 
a = base + 3;
printf("row = %s", a); // HERE!

因此,在我标记的行中,我们引用a而不是* a。这是我不明白的。不是a数字吗 我知道一个字符串知道要对一个字符数组进行火腿处理,直到碰到一个空终止符为止,但是我不明白为什么您不需要星形。不仅仅是一些长屁股吗?用%s格式化它是否知道跟随指针,如果是,为什么%c不这样做呢?为什么在尝试用%s打印时使用星号会导致异常?

x

不同的格式说明符告诉您printf如何解释该参数:

  • %d将其视为普通整数。向其传递指针(a)会导致未定义的行为,但可能会打印指针地址的一部分(数量很大)
  • 要正确打印指针的地址,请使用%p代替%d
  • %c将其视为字符(但仍需使用int;char进行隐式转换)。您的代码通过*a,这的确是一个性格:chara点。
  • %s将其视为指向chars的以null终止的字符串的开头的指针您的代码通过了a,那就是:指向的指针char它将跟随指针,打印字符直到命中\0

因此,表达式的类型a是指向的指针char,而*ais是char如果char与with一起使用%sprintf将尝试将其用作指针。由于此操作“指向”0x00之间的存储位置0xFF,因此会出现段错误,导致无效的内存访问。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么printf只打印字符串中的第一个单词?

来自分类Dev

在C语言的字符串中打印字符时出现分段错误

来自分类Dev

打印字符串指针导致C中的输出损坏

来自分类Dev

为什么x打印字符串的大小?

来自分类Dev

为什么此MIPS循环在询问整数时停止打印字符串

来自分类Dev

在终端中打印字符串时缺少字符

来自分类Dev

为什么打印指向char的指针的第一个元素会打印字符串的内容?

来自分类Dev

C程序未在结构中打印字符串

来自分类Dev

在C中很好地打印字符串数组

来自分类Dev

在awk中打印字符串

来自分类Dev

为什么我不能使用cout在C ++中打印字符串值的数组?

来自分类Dev

读取并打印字符串,C

来自分类Dev

在c中打印字符串指针

来自分类Dev

在C中读取和打印字符串

来自分类Dev

Ncurses-当函数调用中存在多个参数时,为什么不使用mvprintw()打印字符串不起作用?

来自分类Dev

根据C中的规则打印字符串

来自分类Dev

为什么我的程序不打印字符串?

来自分类Dev

在 C 中打印字符指针的问题

来自分类Dev

为什么它不在 c 中验证字符串

来自分类Dev

当条件为“if '-' in string:”时,为什么“print (string)”不打印字符串:

来自分类Dev

在php中打印字符串

来自分类Dev

使用 replaceAll 在 Java 中打印字符串

来自分类Dev

尽管不使用打印,为什么打印字符串?

来自分类Dev

为什么打印字符指针会产生字符串而不是内存地址?

来自分类Dev

为什么在打印字符串时不使用取消引用?

来自分类Dev

如何在 C 中打印字符串或整数?

来自分类Dev

C++使用指针打印字符串中的每个元素

来自分类Dev

为什么字符串作为指针或字符串作为原始数组总是在重载函数中称为指针?

来自分类Dev

在 C 中反转后无法打印字符串

Related 相关文章

  1. 1

    为什么printf只打印字符串中的第一个单词?

  2. 2

    在C语言的字符串中打印字符时出现分段错误

  3. 3

    打印字符串指针导致C中的输出损坏

  4. 4

    为什么x打印字符串的大小?

  5. 5

    为什么此MIPS循环在询问整数时停止打印字符串

  6. 6

    在终端中打印字符串时缺少字符

  7. 7

    为什么打印指向char的指针的第一个元素会打印字符串的内容?

  8. 8

    C程序未在结构中打印字符串

  9. 9

    在C中很好地打印字符串数组

  10. 10

    在awk中打印字符串

  11. 11

    为什么我不能使用cout在C ++中打印字符串值的数组?

  12. 12

    读取并打印字符串,C

  13. 13

    在c中打印字符串指针

  14. 14

    在C中读取和打印字符串

  15. 15

    Ncurses-当函数调用中存在多个参数时,为什么不使用mvprintw()打印字符串不起作用?

  16. 16

    根据C中的规则打印字符串

  17. 17

    为什么我的程序不打印字符串?

  18. 18

    在 C 中打印字符指针的问题

  19. 19

    为什么它不在 c 中验证字符串

  20. 20

    当条件为“if '-' in string:”时,为什么“print (string)”不打印字符串:

  21. 21

    在php中打印字符串

  22. 22

    使用 replaceAll 在 Java 中打印字符串

  23. 23

    尽管不使用打印,为什么打印字符串?

  24. 24

    为什么打印字符指针会产生字符串而不是内存地址?

  25. 25

    为什么在打印字符串时不使用取消引用?

  26. 26

    如何在 C 中打印字符串或整数?

  27. 27

    C++使用指针打印字符串中的每个元素

  28. 28

    为什么字符串作为指针或字符串作为原始数组总是在重载函数中称为指针?

  29. 29

    在 C 中反转后无法打印字符串

热门标签

归档