免费注册 查看新帖 |

Chinaunix

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

关于字符串的一个疑问 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
11 [报告]
发表于 2005-08-01 11:59 |只看该作者

关于字符串的一个疑问

>;>;指针就是32位(当然与机器有关)。

gvim 这点我不敢同意你.

32位机 指针是32位的.因为指针是地址.
64位机指针当然是64位的了.

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
12 [报告]
发表于 2005-08-01 12:05 |只看该作者

关于字符串的一个疑问

原帖由 "mq110" 发表:
>;>;指针就是32位(当然与机器有关)。

gvim 这点我不敢同意你.

32位机 指针是32位的.因为指针是地址.
64位机指针当然是64位的了.


对阿,所以我后面还有括号里的说明嘛。我不敢肯定还和编译器有没有关系,比如运行在IA32里的TC里面的指针是多少位,以前农过,现在忘了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2005-08-01 12:06 |只看该作者

关于字符串的一个疑问

我看错啦.不好意思.看个无关.你说我这眼睛.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
14 [报告]
发表于 2005-08-01 12:14 |只看该作者

关于字符串的一个疑问

不过确实 和编译器有关.  现在教学用的TC 还是模拟的16位机.
2字节的int 2字节的指针.

论坛徽章:
0
15 [报告]
发表于 2005-08-01 12:22 |只看该作者

关于字符串的一个疑问

以前TC指针有near,far的区别
现在32位平台的指针一般就是32位

论坛徽章:
0
16 [报告]
发表于 2005-08-01 16:58 |只看该作者

关于字符串的一个疑问

原帖由 "renstone921" 发表:
由于strtok属于一个破坏性的函数,它要对存储区进行修改,操作系统是不允许你对只读存储区进行修改的,所以段异常.

第一个s本身是一个指针变量,但它指向的存储区是只读存储区.

第二个s是一个常量(数组名),它所指向的存储区是可修改的.
......

论坛徽章:
0
17 [报告]
发表于 2005-08-01 18:10 |只看该作者

关于字符串的一个疑问

"第一个s本身是一个指针变量,但它指向的存储区是只读存储区."

以我的理解好像指针变量初始化后和数组是一样的,为什么就变成只读的了,这个是由编译器决定的还是可以手动改动??

论坛徽章:
0
18 [报告]
发表于 2005-08-01 18:38 |只看该作者

关于字符串的一个疑问

学习C++从C语言开始,学习C语言要从汇编开始.

作个测试,c语言代码产生的汇编.


  1. char str1[] = "This is just a sample";

  2. int main()
  3. {
  4.     char* str2 = "This is another sample";
  5.     char str3[] = "This is the third example";

  6.     return (0);
  7. }

复制代码


编译器产生汇编代码.

  1.         .file        "readonly.c"
  2. .globl str1        ;全局变量str初始化
  3.         .data
  4.         .type        str1, @object
  5.         .size        str1, 22
  6. str1:
  7.         .string        "This is just a sample"
  8.         .section        .rodata        ;;表示这以后的部分是只读数据
  9. .LC0:
  10.         .string        "This is another sample";str2所指向的
  11. .LC1:
  12.         .string        "This is the third example";;str3
  13.         .text
  14. .globl main
  15.         .type        main, @function
  16. main:
  17.         pushl        %ebp
  18.         movl        %esp, %ebp
  19.         pushl        %edi
  20.         pushl        %esi                                ;main函数的参数的入栈
  21.         subl        $32, %esp               
  22.         andl        $-16, %esp
  23.         movl        $0, %eax
  24.         addl        $15, %eax
  25.         addl        $15, %eax
  26.         shrl        $4, %eax
  27.         sall        $4, %eax
  28.         subl        %eax, %esp                        ;上面一堆通过调整栈顶指针来为局部变量分配存储空间.
  29.         movl        $.LC0, -12(%ebp)        ;初始化str2
  30.         leal        -38(%ebp), %edi        ;只要装入只读存储区的有效地址就可以了
  31.         movl        $.LC1, %esi        ;;从这里开始初始化数组str3
  32.         cld
  33.         movl        $26, %ecx
  34.         rep
  35.         movsb                                        ;通过字节传送初始化str3
  36.         movl        $0, %eax
  37.         leal        -8(%ebp), %esp
  38.         popl        %esi
  39.         popl        %edi
  40.         leave
  41.         ret
  42.         .size        main, .-main
  43.         .ident        "GCC: (GNU) 4.0.1 20050729 (Red Hat 4.0.1-6)"
  44.         .section        .note.GNU-stack,"",@progbits
复制代码

论坛徽章:
0
19 [报告]
发表于 2005-08-01 20:37 |只看该作者

关于字符串的一个疑问

原帖由 "luojiannx" 发表:
动态内存分配
malloc


不清楚这样如何定义分配内存和定义字符串?

论坛徽章:
0
20 [报告]
发表于 2005-08-01 21:38 |只看该作者

关于字符串的一个疑问


  1. #include <stdio.h>;
  2. #include <stdlib.h>;
  3. #define SIZE 10
  4. main()
  5. {
  6.         int i;
  7.         char *p;
  8.         p=(char *)malloc(SIZE+1);
  9.         for(i=0;i<SIZE;i++)
  10.         {
  11.                 p[i]='c';
  12.         }
  13.         p[i]=0;
  14.         printf("%s\n",p);
  15.         free(p);
  16. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP