鱼C论坛

 找回密码
 立即注册
查看: 2858|回复: 3

关于二维字符型数组用scanf取值问题!在线等,很急的

[复制链接]
发表于 2019-4-13 22:47:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

#include <stdio.h>
int main(void)
{
        int n;
        char s[][1000]={0};
        while(scanf("%d",&n)==1) //输入n,表示要输入的字符串个数
        {
                for(int i = 0;i<n;i++)
                        scanf("%s",&s[i]);//对二维数组赋值
        }       
                printf("%c\n",s[2][1]);//输出二维字符型数组中的某个元素
}
结果见图1
但是当我开始就定义好了行和列s[1000][1000]程序就正常了。这是为什么?如果是当成s[0][1000]不因该程序一运行就runtime error吗?

图1

图1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-13 23:17:09 | 显示全部楼层
    试试这个代码:
#include <stdio.h>

int main(void)
{
        int i , n                                       ;
        char s[100][100] = {0}                          ;
        scanf("%d" , & n)                               ;
        for(i = 0 ; i < n ; i ++) scanf("%s" , s[i])    ;
        printf("\n")                                    ;
        for(i = 0 ; i < n ; i ++) printf("%s\n" , s[i]) ;
        printf("%c\n" , s[2][1])                        ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-13 23:44:54 From FishC Mobile | 显示全部楼层
jackz007 发表于 2019-4-13 23:17
试试这个代码:

我是想知道明明C语言可以在定义二维数组进行初始化时不需要填写第一个维度,为什么不能进行赋值?你的代码我知道可以但不是我想要的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-14 09:22:25 | 显示全部楼层
本帖最后由 jackz007 于 2019-4-14 09:36 编辑
体弱多病程序权 发表于 2019-4-13 23:44
我是想知道明明C语言可以在定义二维数组进行初始化时不需要填写第一个维度,为什么不能进行赋值?你的代 ...


      首先应该明确,你的代码在运行中已经发生了数组访问越界,从而伤害到了程序代码,所以才会出现异常。其直接原因,就是数组 s[][] 容量定义过小造成。
      二维数组定义不填写第一个维度是有前提条件的,那就是必须通过初始化赋值,也就是通过元素或元素组的实际数量来间接明确这个维度。
      事实证明,以图省事,企图把麻烦交给计算机为动机的偷懒,最后都不可能绕过和解决问题。
      例如,用下面的方法也可以省略第一维度的定义,但是感觉是在自找麻烦
        char s[][100] = {{0} , {0} , {0} , {0} , {0} , {0} , {0} , {0} , {0} , {0}} ;

      把这个定义换到你的代码中试试看,是不是也可以避免出现问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 14:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表