免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 我要思考
打印 上一主题 下一主题

指针数组为什么不能这么用? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-01-25 16:51 |只看该作者
原帖由 aboytom 于 2007-1-25 16:35 发表
查看一下printf的参数吧
printf("Array[0] = %s;\r\nArray[1] = %s;\r\n",Array[0],Array[1]);
这句明显是错误,%s,就是要打印一个字符串,那你后面的参数应该是一个字符串指针,
而Array[0]只是一 ...


你的说法也是错了,别乱教人。

第一,程序根本还没编译到那一步,array[0]="FreeBSD"就已经出错了;
第二,你那种改法也是错了,&Array[0]指向的字符串是没有结束符的,会导致运行时刻不可预知的错误

论坛徽章:
0
12 [报告]
发表于 2007-01-25 16:57 |只看该作者
原帖由 nokuta 于 2007-1-25 16:51 发表


你的说法也是错了,别乱教人。

第一,程序根本还没编译到那一步,array[0]="FreeBSD"就已经出错了;
第二,你那种改法也是错了,&Array[0]指向的字符串是没有结束符的,会导致运行时刻不可 ...


我只是谈谈printf 这个函数的参数

论坛徽章:
0
13 [报告]
发表于 2007-01-25 17:03 |只看该作者
--

修改后的程序。希望楼主能认认真真地比较原始程序和改后程序的异同,然后自己尝试着得出一些结论。

方案 1:


  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char *Array[2];
  5.         Array[0] = "FreeBSD";
  6.         Array[1] = "Linux";
  7.         printf("Array[0] = %s;\r\nArray[1] = %s;\r\n",Array[0],Array[1]);
  8.     return 0;
  9. }
复制代码


方案 2:


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main()
  5. {
  6.         char *Array[2];
  7.         Array[0] = malloc(8); strcpy(Array[0], "FreeBSD");
  8.         Array[1] = malloc(6); strcpy(Array[1], "Linux");
  9.         printf("Array[0] = %s;\r\nArray[1] = %s;\r\n",Array[0],Array[1]);
  10.         free(Array[0]);
  11.         free(Array[1]);
  12.     return 0;
  13. }
复制代码


附:改前程序

  1. int main()
  2. {
  3.         char *Array = malloc(3 * sizeof(char));
  4.         Array[0] = "FreeBSD";
  5.         Array[1] = "Linux";
  6.         printf("Array[0] = %s;\r\nArray[1] = %s;\r\n",Array[0],Array[1]);
  7.         free(Array);
  8.     return 0;
  9. }
复制代码

论坛徽章:
0
14 [报告]
发表于 2007-01-25 17:06 |只看该作者
第一个方案.我用过.
就是想搞个动态数组出来.
谢谢langue 兄弟.
怎样才能实现这样的二维数组
Array[0]["os"] = "Linux";
就是用字符串做键名

论坛徽章:
0
15 [报告]
发表于 2007-01-25 17:10 |只看该作者
原帖由 我要思考 于 2007-1-25 17:06 发表
第一个方案.我用过.
就是想搞个动态数组出来.
谢谢langue 兄弟.
怎样才能实现这样的二维数组
Array[0]["os"] = "Linux";
就是用字符串做键名


单用 C 做不到。用 dbm 吧。key -> data 对,还能检索,比这样做好多了。

--

论坛徽章:
0
16 [报告]
发表于 2007-01-25 17:10 |只看该作者
在看一个hash table 实现的 Key = Value

论坛徽章:
0
17 [报告]
发表于 2007-01-25 17:15 |只看该作者
--

其实 C 语言这个不方便、那个不方便的,但它的应用仍然很广泛。

如果要用字符串做数组的索引,就等于是要破坏 C 的语法,所以是不可行的。或许其他语言里有支持,不妨变通一下。

--

论坛徽章:
0
18 [报告]
发表于 2007-01-25 17:37 |只看该作者
楼主那个不是指针数组

论坛徽章:
0
19 [报告]
发表于 2007-01-25 18:17 |只看该作者
int main()
{
        char **Array = malloc(3 * sizeof(char));
        Array[0] = "FreeBSD";
        Array[1] = "Linux";
        printf("Array[0] = %s;\r\nArray[1] = %s;\r\n",Array[0],Array[1]);
        free(Array);
    return 0;
}

论坛徽章:
0
20 [报告]
发表于 2007-01-26 08:36 |只看该作者
这种情况在C语言中仅可以声明一个预定的指针数组:

char *arrary[128];
...

然后按需申请空间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP