【发布时间】:2015-07-27 14:29:57
【问题描述】:
我正在尝试创建一个包含 10 个指针的数组,它将在 for 循环中接收来自 scanf 的输入。然后我想调用那个列表。但是,我收到内存运行时错误:
#include <stdio.h>
int main(void) {
int i;
char * string[10];
//printf("%s", *string[0]);
for(i = 0; i<3; i++)
{
printf("what is string");
scanf("%s", string[i]);
printf("%s", string[i]);
}
return 0;
}
【问题讨论】:
-
难怪,你没有为字符串分配内存,而是用野指针对着大象射击。请阅读指针和内存分配。你错过了最基本的 - 没有冒犯。
-
什么是字符串?指针不会伤害我...
-
当使用 '%s' 格式字符串调用 scanf() : 1) 时,始终包含最大长度修饰符,即 I.E. scanf("%25s", string[i]); (即使这将失败,除非为 10 个字符串指针中的每一个执行了至少 26 个字符的内存分配。) 2)始终检查返回值(而不是参数值)以确保操作成功。在这种情况下,==1 是成功的 3) %s 格式说明符在遇到任何空格(如换行符)时停止,因此发布的代码(scanf)将在第一次迭代后失败。建议“%25s”(注意前导空格)