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

考虑下面的C中的两个语句。两者之间有什么区别?

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

以下是主要区别:
C中的char s[]和char *s有什么区别()

文章图片
语句"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

【C中的char s[]和char *s有什么区别()】在上述程序上运行可能还会产生警告:"警告:不建议将字符串常量转换为'char *'"。发生此警告的原因是s不是const指针, 而是存储了只读位置的地址。指向const的指针可以避免该警告。
#include < stdio.h> int main() { const char *s = "geeksquiz" ; printf ( "%lu" , sizeof (s)); return 0; }

本文由Abhay Rathi提供。如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。

    推荐阅读