免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 13449 | 回复: 30
打印 上一主题 下一主题

[C] 使用函数给二维数组赋值的奇怪现象 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-07-07 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-12 09:03 |只看该作者 |倒序浏览
有一个奇怪的现象,就是在函数中给一个二维数组赋值,但在主函数中打印出来的数组的值的第一条记录都是乱码,第二条确显示正常。
如果是在被调用的函数中打印数组的值,则显示正常。不知道是什么原因。
void fuzi(char *s[100][10]){
     int i,j;     
     for(i=0;i<100;i++){
         for(j=0;j<10;j++){
              s[i][j]="从数据库中读取值";
              //下面这一句打印出来的文字正常
              printf("%s",s[i][j]);
              //下面这一句打印出来的文字正常
         }
     }
}
int main(){
     char *s[100][10];
     fuzi(s);//这一句打印出来的第一条记录是乱码,但第二条就是正常的
}


[ 本帖最后由 老陈73 于 2009-10-12 09:08 编辑 ]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-07-07 06:20:00
2 [报告]
发表于 2009-10-12 09:05 |只看该作者

第二个现象

我在函数中这样写,是正常的:
int i,j;     
     for(i=0;i<100;i++){
         for(j=0;j<10;j++){
              s[i][j]="从数据库中读取值";
         }
     }

但改成这样,就出错了:
int i=0,j=0;     
     for(;i<100;i++){
         for(;j<10;j++){
              s[i][j]="从数据库中读取值";
         }
     }

论坛徽章:
0
3 [报告]
发表于 2009-10-12 09:08 |只看该作者
原帖由 老陈73 于 2009-10-12 09:05 发表
我在函数中这样写,是正常的:
int i,j;     
     for(i=0;i



第二种赋值,从根本上就是错误的。你的J值,成了最大值以后,就再也没用了。

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
4 [报告]
发表于 2009-10-12 09:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-07-07 06:20:00
5 [报告]
发表于 2009-10-12 09:10 |只看该作者
原帖由 naihe2010 于 2009-10-12 09:08 发表



第二种赋值,从根本上就是错误的。你的J值,成了最大值以后,就再也没用了。

喔,这个知道了

但第一条记录乱码的现象,不知道是怎么回事。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-07-07 06:20:00
6 [报告]
发表于 2009-10-12 09:11 |只看该作者
原帖由 c/unix 于 2009-10-12 09:10 发表
楼主修改的真快

刚还看见楼主直接把s[j]给printf出来了



我在编辑器上是写的s[j],但显示出来就是s[j]了
现在实际上是写的s[j],这样显示出来才是s[j]



晕死,[i] 始终打不出来

[ 本帖最后由 老陈73 于 2009-10-12 09:17 编辑 ]

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
7 [报告]
发表于 2009-10-12 09:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-07-07 06:20:00
8 [报告]
发表于 2009-10-12 11:14 |只看该作者
原帖由 c/unix 于 2009-10-12 09:57 发表
试试这个

#include
#include

void fuzi(char *s[100][10])
{
     int i,j;     
     for(i=0;i

你这个跟我的不是一样的吗?

论坛徽章:
0
9 [报告]
发表于 2009-10-12 11:35 |只看该作者
void fuzi(char *s[100][10]){
     int i,j;     
     for(i=0;i<100;i++){
         for(j=0;j<10;j++){
              (*s)[i][j]="从数据库中读取值";
              //下面这一句打印出来的文字正常
              printf("%s", (*s)[i]);
              //下面这一句打印出来的文字正常
         }
     }
}
int main(){
     char s[100][10];
     fuzi(&s);//这一句打印出来的第一条记录是乱码,但第二条就是正常的
}

论坛徽章:
0
10 [报告]
发表于 2009-10-12 15:15 |只看该作者
原帖由 iceway 于 2009-10-12 11:35 发表
void fuzi(char *s[100][10]){
     int i,j;     
     for(i=0;i


这样就错了。

一定要声明成char *s[100][10];

声明成*s[100][10],是声明一个二维的数组,每个元素是一个指针。
声明成s[100][10],是声明一个二维的数组,每个元素是一个char类型。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP