我想在两个单独的数组中解析用户输入(使用 scanf)。 g++ 编译没有错误,但出现内存访问错误(核心转储)。
(德语:“Speicherzugriffsfehler (Speicherabzug geschrieben)”)
char *top[10];
char *bottom[10];
for(i = 0; i < 5; i++){
printf("Karte %d: Obere Werte? ", i );
scanf( "%s", top[i] );
printf( "Karte %d: Untere Werte? ", i);
scanf( "%s", bottom[i] );
}
这里有什么问题?我尝试使用"stringcpy"
带有临时变量("stringcpy(top[i], temp)")
,但也没有成功。
有什么建议么?
您还没有为字符串分配内存。您提供给 scanf 的参数是未初始化的指针。
top[i] = "test"
为变量分配一个指针并使用有效值对其进行初始化。
相比之下,scanf(..., top[i])
尝试写到哪里top[i]
点。但top[i]
未初始化并指向某个随机位置,这会导致内存访问错误。
当你看着人扫描,您可以阅读下
转换
...
s
匹配一系列非空白字符;
现在是重要的部分
next 指针必须是指向字符数组的指针,该数组的长度足以容纳输入序列和自动添加的终止空字节 ('\0')。
所以你必须通过分配一个数组malloc()
或者声明字符数组足够大。
char top[10][21];
char bottom[10][21];
int i;
for(i = 0; i < 5; i++){
printf("Karte %d: Obere Werte? ", i);
scanf("%20s",top[i]);
printf("Karte %d: Untere Werte? ", i);
scanf("%20s",bottom[i]);
}
With
scanf("%20s",top[i]);
您限制读取的字符数,以防止缓冲区溢出
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)