Инициализировать строку в C для пустой строки

Я хочу инициализировать строку в C для пустой строки. Я пробовал:

string[0] = ""; 

но он написал

"warning: assignment makes integer from pointer without a cast"

Как мне это сделать?

Ответ 1

Предполагая, что ваш массив с именем 'string' уже существует, попробуйте

string[0] = '\0';

\0 - явный терминатор NUL, необходимый для обозначения конца строки.

Ответ 2

Вы хотите, чтобы первый символ строки был равен нулю, например:

char myString[10];
myString[0] = '\0';

(Или myString[0] = 0;)

Или, собственно, при инициализации вы можете сделать:

char myString[10] = "";

Но это не общий способ установки строки до нулевой длины после ее определения.

Ответ 3

В дополнение к версии Will Dean следующие общие для инициализации всего буфера:

char s[10] = {'\0'};

или

char s[10];
memset(s, '\0', sizeof(s));

или

char s[10];
strncpy(s, "", sizeof(s));

Ответ 4

Присвоение строковых литералов массиву char разрешено только во время объявления:

char string[] = "";

Объявляет строку как массив char размера 1 и инициализирует ее с помощью \0.

Попробуйте также:

char str1[] = ""; 
char str2[5] = ""; 
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5

Ответ 5

calloc выделяет запрошенную память и возвращает указатель на нее. Он также устанавливает выделенную память в ноль.

Если вы все время используете string как пустую строку:

char *string = NULL;
string = (char*)calloc(1, sizeof(char));

Если вы планируете сохранить некоторое значение в string позже:

char *string = NULL;
int numberOfChars = 50; // you can use as many as you need
string = (char*)calloc(numberOfChars + 1, sizeof(char));

Ответ 6

string[0] = "";
"warning: assignment makes integer from pointer without a cast

Хорошо, давайте погрузиться в выражение...

0 int: представляет количество символов (если string (или затухает) a char *), чтобы продвигаться от начала объекта string

string[0]: объект char, расположенный в начале объекта string

"": строковый литерал: объект типа char[1]

=: оператор присваивания: пытается присвоить значение типа char[1] объекту типа char. char[1] (затухание до char*) и char не совместимы с присваиванием, но компилятор доверяет вам (программисту) и в любом случае выполняет задание путем литья типа char* (что char[1] заглохло) на int --- и вы получите предупреждение в качестве бонуса. У вас действительно хороший компилятор: -)

Ответ 7

Я думаю, что Амархош ответил правильно. Если вы хотите инициализировать пустую строку (не зная размер), лучший способ:

//this will create an empty string without no memory allocation. 
char str[]="";// it is look like {0}

Но если вы хотите инициализировать строку с фиксированным распределением памяти, вы можете сделать:

// this is better if you know your string size.    
char str[5]=""; // it is look like {0, 0, 0, 0, 0} 

Ответ 8

Немного поздно, но я думаю, что ваша проблема может заключаться в том, что вы создали массив нулевой длины, а не массив длиной 1.

Строка представляет собой последовательность символов, за которой следует строковый ограничитель ('\0'). Пустая строка ("") состоит из не символов, за которыми следует один символ символа строки, т.е. Всего один символ.

Итак, я бы попробовал следующее:

string[1] = ""

Обратите внимание, что это поведение не эмулируется strlen, которое не считает терминатор частью длины строки.