对于 getline() 函数,我尝试了两种方法为字符串分配内存空间,但第一种方法有效,第二种方法无效。谁能解释为什么第二个不起作用?
第一个
#include <stdio.h>
int main()
{
int bytes_read;
int nbytes = 100;
char *my_string;
puts ("Please enter a line of text.");
/* These 2 lines are the heart of the program. */
my_string = (char *) malloc (nbytes + 1);
bytes_read = getline (&my_string, &nbytes, stdin);
if (bytes_read == -1)
{
puts ("ERROR!");
}
else
{
puts ("You typed:");
puts (my_string);
}
return 0;
}
第二个:
#include <stdio.h>
int main()
{
int bytes_read;
int nbytes = 100;
char my_string[nbytes+1];
puts ("Please enter a line of text.");
/* These 2 lines are the heart of the program. */
bytes_read = getline (&my_string, &nbytes, stdin);
if (bytes_read == -1)
{
puts ("ERROR!");
}
else
{
puts ("You typed:");
puts (my_string);
}
return 0;
}
第二个可以编译,但是当我执行它时:
bash-3.2$ ./a.out
Please enter a line of text.
lsdfa
Bus error: 10
它说总线错误:10
我不知道可能的原因是什么,有人可以帮助我吗?