Инициализировать строку в C для пустой строки - PullRequest
14 голосов
/ 10 ноября 2010

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

string[0] = ""; 

но там написано

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

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

Ответы [ 9 ]

24 голосов
/ 10 ноября 2010

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

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

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

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

char myString[10] = "";

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

19 голосов
/ 10 ноября 2010

В дополнение к версии Уилла Дина, для инициализации всего буфера характерны:

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

или

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

или

char s[10];
strncpy(s, "", sizeof(s));
9 голосов
/ 10 ноября 2010

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

string[0] = '\0';

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

3 голосов
/ 01 сентября 2014

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));
3 голосов
/ 10 ноября 2010

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

char string[] = "";

Это объявляет строку как массив символов размера 1 и инициализирует ее как \0.

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

char str1[] = ""; 
char str2[5] = ""; 
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5
2 голосов
/ 10 ноября 2010
string[0] = "";
"warning: assignment makes integer from pointer without a cast

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

0 int: представляет число символов (при условии, что string является (или распадается на) символом *) для продвижения от начала объекта string

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

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

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

1 голос
/ 06 января 2019

Для этого вы можете использовать:

strcpy(string, "");
0 голосов
/ 03 января 2017

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

Строка - это серия символов, за которыми следует символ конца строки ('\0'). Пустая строка ("") не содержит символов, за которыми следует один символ-разделитель строки, то есть всего один символ.

Поэтому я бы попробовал следующее:

string[1] = ""

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

0 голосов
/ 01 августа 2016

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

//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} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...