a
ни на что не указывает. Или, на самом деле, он неинициализирован, поэтому указывает куда-то, но не на что-то действительное.
Вы можете предоставить хранилище в стеке, как вы уже пробовали:
#include <stdio.h>
int main()
{
char x[100];
char *a = x; // a points to the storage provided by x on the stack
scanf("%s",a); // should work fine
printf("%s",a);
return 0;
}
Обратите внимание, что printf("%s",x);
дает точно такой же результат, a
указывает на x
, поэтому ваша строка будет "жить".
Или вы можете настроить управление памятью, используя malloc
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *a = malloc (100*sizeof(char)) // a points to the storage provided by malloc
if (a != null)
{
perror ("malloc"); // unable to allocate memory.
return 1;
}
scanf("%s",a); // should work fine
printf("%s",a);
free (a); // just remember to free the memory when you're done with it.
return 0;
}
НТН.
EDIT
Кроме того, до начала комментариев ... Это очень небезопасный код, но я полагаю, вы просто пытаетесь навести порядок в указателях, поэтому я просто попытался подтолкнуть вас в правильном направлении. (Если вам не нужно смотреть на чтение ограниченного объема данных, убедитесь, что он помещается в ваши буферы, если он из какого-то другого источника, чем файл, вам нужно убедиться, что вы получили все это, и так далее, и так далее ).