Рубрики

В чем разница между char s [] и char * s в C?

Рассмотрим ниже два утверждения на языке 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));

  

    // Раскомментирование ниже строки вызовет неопределенное поведение

    // (вызвал ошибку сегментации на 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;

}

Эта статья предоставлена Абхай Рати. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

В чем разница между char s [] и char * s в C?

0.00 (0%) 0 votes