C - 为什么字符串中的分段错误而不是字符



>我只想打印字符串的第一个字符作为字符串(%s格式说明符(,这会导致分段错误。 但是当我使用 %c 格式说明符时,它工作正常。 为什么会这样?

#include<stdio.h>
#include<string.h>
int main()
{
    char *str = "Feasible" ;
    printf("%s",*str);
    return 0;
}

发生分段错误有什么完美的理由吗?我的代码中的分段错误在哪里?

发生分段错误是因为您的字符串是 char *,即指向 char 的指针。当您现在传入 *str 时

printf ("%sn", *str);

将 str 指向的 char 值(字符串中的第一个字符(传递给 printf。Printf 期望获取指向字符串的第一个字符的指针,并尝试访问给定的内存位置,然后导致分段错误。

对于格式说明符 "%s"printf需要一个指向字符数组的指针;换句话说,提供的值被解释为内存地址。现在请注意,表达式*str正在取消引用指针str,以便结果是一个字符值,即 71作为'F'的 ASCII 表示形式。因此,如果您使用格式说明符"%s"但提供值71作为参数,则71将被解释为内存地址;并且此内存地址很可能超出了允许的寻址空间,因此存在段错误。

相比之下,格式"%c"有效,因为它需要一个字符值,如71(或'F'(。

%s用于打印字符串(通过指向第一个字符的指针(。

%c用于打印单个字符(通过其 ASCII 值(。

如果使用*str is 表示 str 指向的第一个字符的值,所以需要 %c

相关内容

  • 没有找到相关文章

最新更新