Я хочу инициализировать строку в C для пустой строки. Я пробовал:
string[0] = "";
но он написал
"warning: assignment makes integer from pointer without a cast"
Как мне это сделать?
Я хочу инициализировать строку в C для пустой строки. Я пробовал:
string[0] = "";
но он написал
"warning: assignment makes integer from pointer without a cast"
Как мне это сделать?
Предполагая, что ваш массив с именем 'string' уже существует, попробуйте
string[0] = '\0';
\0
- явный терминатор NUL, необходимый для обозначения конца строки.
Вы хотите, чтобы первый символ строки был равен нулю, например:
char myString[10];
myString[0] = '\0';
(Или myString[0] = 0;
)
Или, собственно, при инициализации вы можете сделать:
char myString[10] = "";
Но это не общий способ установки строки до нулевой длины после ее определения.
В дополнение к версии Will Dean следующие общие для инициализации всего буфера:
char s[10] = {'\0'};
или
char s[10];
memset(s, '\0', sizeof(s));
или
char s[10];
strncpy(s, "", sizeof(s));
Присвоение строковых литералов массиву char разрешено только во время объявления:
char string[] = "";
Объявляет строку как массив char размера 1 и инициализирует ее с помощью \0
.
Попробуйте также:
char str1[] = "";
char str2[5] = "";
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 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));
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
--- и вы получите предупреждение в качестве бонуса. У вас действительно хороший компилятор: -)
Я думаю, что Амархош ответил правильно. Если вы хотите инициализировать пустую строку (не зная размер), лучший способ:
//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}
Немного поздно, но я думаю, что ваша проблема может заключаться в том, что вы создали массив нулевой длины, а не массив длиной 1.
Строка представляет собой последовательность символов, за которой следует строковый ограничитель ('\0'
). Пустая строка (""
) состоит из не символов, за которыми следует один символ символа строки, т.е. Всего один символ.
Итак, я бы попробовал следующее:
string[1] = ""
Обратите внимание, что это поведение не эмулируется strlen
, которое не считает терминатор частью длины строки.