Предполагается, что эта программа запрашивает количество букв в слове (будет введено позже), поэтому она знает, сколько места нужно выделить.Кажется, все работает нормально, однако не имеет значения, выделяете ли вы меньше памяти, чем необходимо для хранения слова.Это ошибка, которую я должен исправить, или это потому, что так работает указатель на char (char *)?
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int a = 0;
printf("Enter the size of the word(0=exit) :");
scanf("%d",&a);
if(a==0){return 0;}
else
{
char *word = (char *)malloc(a*sizeof(char) + 1);
if(word == NULL)
{
fprintf(stderr,"no memory allocated");
return 1;
}
printf("Reserved %d bytes of space (accounting for the end-character).\nEnter your word: ", a*sizeof(char) + 1);
scanf("%s", word);
printf("The word is: %s\n", word);
}
return 0;
}
Хорошо, я думаю, что я мог бы это исправить, так как работа с valgrind не показывает ничегоиз ошибок, которые он показал ранее.
char aux[]="";
scanf("%s", aux);
if(strlen(aux)>(a*sizeof(char) + 1))
{
fprintf(stderr,"Word bigger than memory allocated\nExiting program\n");
return 1;
}
else
{
strcpy(word,aux);
printf("The word is: %s\nAnd is %d characters long\n", word, strlen(word));
}
Теперь я сомневаюсь: почему я могу объявить пустой массив символов (char aux [] = ""), а затем использовать «лишнюю» память без ошибок(в выводе valgrind) все еще char * aux = "";дает мне ошибку сегментации?Я очень новичок в программировании на C, поэтому прошу прощения, если это очевидный / тупой вопрос.Спасибо.