Я новичок в программировании на C, и теперь изучаю строки. Мой вопрос: если я выделяю строку, используя malloc
(как в коде ниже), является ли символ NULL автоматически вставлен в конце строки? Я нашел ответ в другом вопросе здесь, и кажется, что символ NULL не включается автоматически. Но вот проблема: я знаю, что такие функции, как strlen
, не работают, если нет символа NULL, и в этом коде я использую его, и он работает. Поэтому я думаю, что в конце моей строки есть \0
, даже если я ее не пишу нигде. Какой ответ?Выделение строки с помощью malloc
Вот код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
char *stringa1;
int n;
int i;
printf("How many characters in the string? ");
scanf("%d", &n);
stringa1 = (char*) malloc(n*sizeof(char));
printf("Insert the string: ");
scanf("%s", stringa1);
free(stringa1);
return 0;
}
Ваш код выглядит хорошо. 'scanf' помещает NUL (не NULL) в конец строки. Попробуйте вызвать 'strlen' прямо перед' free (stringa1) '. –
Чтобы повторить то, что сказал @MichaelWalz, и чтобы nitpick, указатель может быть «NULL», а символ может быть «NUL». –
В предыдущей версии я попробовал, и он возвращает число, которое я положил в первом 'scanf()'. – FranzGoogle