Введите нулевой указатель на символ * - PullRequest
0 голосов
/ 26 апреля 2010

Предположим, у меня есть char* elem, который должен содержать char**, такой что elem[0] = char**, elem[1...m]= <more chars>. Есть ли способ, которым я могу положить нулевой ptr в char* elem? Когда я пытаюсь установить elem = NULL, выдается ошибка типа, потому что NULL - это int.

Любая помощь будет принята с благодарностью!

Ответы [ 5 ]

1 голос
/ 26 апреля 2010

Проблема не в NULL против 0, они одинаковы и означают нулевой указатель, который отличается от арифметики 0 или двоичного 0. Ваша проблема, скорее всего, связана с определением массива. 1003 *

Строковый регистр (указатель на символ):

char *s;
s = malloc(10 * sizeof(char));
s[0] = 'H';      /* set char */
s[1] = NULL;     /* not ok */
s[2] = '\0';     /* binary 0, end of string marker */

Указатель указателя на символ:

char **x;
x = malloc(10 * sizeof(char *));
x[0] = "Hello";  /* let it point to string */
x[1] = NULL;     /* let it point to nowhere */
x[2] = 0;        /* same thing as above */
x[3] = '\0';     /* bad, expects pointer to char not char */
1 голос
/ 26 апреля 2010

char* указывает на char, а не char*. Если ваша архитектура не имеет 8-битных адресов или ваши символы не шире 8-битных, вы не можете втиснуть указатель в символ.

1 голос
/ 26 апреля 2010

Если вы ищете двоичный 0, попробуйте '\ 0'
Это нулевое окончание в конце строки (char *)

0 голосов
/ 26 апреля 2010

Я думаю, вы перепутали указатели.

char* - string
char ** - address of that string or an array of strings depending on your data
char *** - address of an array of strings.

Попробуйте перечитать свое задание, может быть, вы что-то не так поняли.

LE: И то, что Джероми упомянул в своем комментарии, работает.

typedef struct{

char** some_data

}info;

char* info;

Если вы хотите, чтобы какой-то символ ** был НЕДЕЙСТВИТЕЛЕН, так как в какой-то момент просто инициализируйте вашу информацию-> some_data в NULL при выделении памяти.

0 голосов
/ 26 апреля 2010

Если у вас есть простая переменная char* foo, тогда foo[0] будет иметь тип char, поэтому вам придется установить ее на \0 (или 0).

...