关于二维字符型数组用scanf取值问题!在线等,很急的
#include <stdio.h>
int main(void)
{
int n;
char s[]={0};
while(scanf("%d",&n)==1) //输入n,表示要输入的字符串个数
{
for(int i = 0;i<n;i++)
scanf("%s",&s);//对二维数组赋值
}
printf("%c\n",s);//输出二维字符型数组中的某个元素
}
结果见图1
但是当我开始就定义好了行和列s程序就正常了。这是为什么?如果是当成s不因该程序一运行就runtime error吗?
试试这个代码:
#include <stdio.h>
int main(void)
{
int i , n ;
char s = {0} ;
scanf("%d" , & n) ;
for(i = 0 ; i < n ; i ++) scanf("%s" , s) ;
printf("\n") ;
for(i = 0 ; i < n ; i ++) printf("%s\n" , s) ;
printf("%c\n" , s) ;
}
jackz007 发表于 2019-4-13 23:17
试试这个代码:
我是想知道明明C语言可以在定义二维数组进行初始化时不需要填写第一个维度,为什么不能进行赋值?你的代码我知道可以但不是我想要的答案 本帖最后由 jackz007 于 2019-4-14 09:36 编辑
体弱多病程序权 发表于 2019-4-13 23:44
我是想知道明明C语言可以在定义二维数组进行初始化时不需要填写第一个维度,为什么不能进行赋值?你的代 ...
首先应该明确,你的代码在运行中已经发生了数组访问越界,从而伤害到了程序代码,所以才会出现异常。其直接原因,就是数组 s[][] 容量定义过小造成。
二维数组定义不填写第一个维度是有前提条件的,那就是必须通过初始化赋值,也就是通过元素或元素组的实际数量来间接明确这个维度。
事实证明,以图省事,企图把麻烦交给计算机为动机的偷懒,最后都不可能绕过和解决问题。
例如,用下面的方法也可以省略第一维度的定义,但是感觉是在自找麻烦
char s[] = {{0} , {0} , {0} , {0} , {0} , {0} , {0} , {0} , {0} , {0}} ;。
把这个定义换到你的代码中试试看,是不是也可以避免出现问题?
页:
[1]