C中的char s[]和char *s有什么区别

考虑c中的两个表述,两者的区别是什么?

   char s[] = "geeksquiz";
   char *s  = "geeksquiz";

以下是主要的区别:

语句’ char s[] = ” geeksquiz ” ‘创建一个字符数组,它和其他数组一样,我们可以进行所有数组操作。这个数组唯一特殊的地方是,虽然我们初始化了9个元素,但它的大小是10(编译器会自动添加’ \0 ‘)

#include <stdio.h>
int main()
{
    char s[] = "geeksquiz";
    printf("%lu", sizeof(s));
    s[0] = 'j';
    printf("\n%s", s);
    return 0;
}

输出:

10
jeeksquiz

语句’ char *s = ” geeksquiz ” ‘创建一个字符串字面量。字符串字面值被大多数编译器存储在内存的只读部分。C和c++标准说字符串字面值具有静态存储时间,任何修改它们的尝试都会给出未定义的行为。

S只是一个指针,和其他指针一样,存储字符串字面量的地址。

#include <stdio.h>
int main()
{
    char *s = "geeksquiz";
    printf("%lu", sizeof(s));
 
    // Uncommenting below line would cause undefined behaviour
    // (Caused segmentation fault on gcc)
    //  s[0] = 'j'; 
    return 0;
}

输出:

8

运行上述程序可能也会产生一个警告“警告:从字符串常量到’ char* ‘的转换已弃用”。出现此警告是因为s不是const指针,而是存储只读位置的地址。该警告可以通过指向const的指针来避免。

#include <stdio.h>
int main()
{
    const char *s = "geeksquiz";
    printf("%lu", sizeof(s));
    return 0;
}
—— 完 ——
相关推荐
评论

立 为 非 似

中 谁 昨 此

宵 风 夜 星

。 露 , 辰

文章点击榜

细 无 轻 自

如 边 似 在

愁 丝 梦 飞

。 雨 , 花