c语言中的字符串是不是有最大的长度限制,如果有是多少哦?

SmileWangCn 2006-08-20 09:42:18
c语言中的字符串是不是有最大的长度限制,如果有是多少哦?
谢谢哦~!
...全文
3877 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckp 2006-08-30
  • 打赏
  • 举报
回复 1
在VC中举一个最简单的例子(不知道其他的C编译器能否成立?):

#include "stdio.h"

int main(int argc, char* argv[])
{
char a[12] = "dfasfeg\n";

printf("%s\n", a);
return 0;
}

注意,VC编译生成的汇编代码:
; 9 : char a[12] = "dfasfeg\n";

00018 a1 00 00 00 00 mov eax, DWORD PTR ??_C@_08PLCJ@dfasfeg?6?$AA@
0001d 89 45 f4 mov DWORD PTR _a$[ebp], eax
00020 8b 0d 04 00 00
00 mov ecx, DWORD PTR ??_C@_08PLCJ@dfasfeg?6?$AA@+4
00026 89 4d f8 mov DWORD PTR _a$[ebp+4], ecx
00029 8a 15 08 00 00
00 mov dl, BYTE PTR ??_C@_08PLCJ@dfasfeg?6?$AA@+8
0002f 88 55 fc mov BYTE PTR _a$[ebp+8], dl
00032 33 c0 xor eax, eax
00034 66 89 45 fd mov WORD PTR _a$[ebp+9], ax
00038 88 45 ff mov BYTE PTR _a$[ebp+11], al
显然:
eax是指向字符串数组起始地址的指针;
ecx是字符串数组的大小;
后面的dl,ax和al可以暂时不用管它,和数组大小没有直接关系。
ecx是一个32位的寄存器,它的大小就限制了数组的长度。
2^32=4G,现在32位CPU的地址线宽度的上限正好是32位,也就是说,一个字符串数组的理论长度,可以达到32位CPU的最大寻址空间。

那么,在64位的C编译器中,字符串是否还是限制在2^32上,就要看VS2005如何定义了。
lann64 2006-08-29
  • 打赏
  • 举报
回复
把mp3读入c的字符串?
如果遇到0,字符串就结束了,当然后面就没有了。
二进制文件最好别用字符串处理。
cpcyfun 2006-08-29
  • 打赏
  • 举报
回复
............................
SmileWangCn 2006-08-29
  • 打赏
  • 举报
回复
我现在是把mp3文件读入一个字符串,就是3万多以后的东西就没有喔~!
jimmy23 2006-08-22
  • 打赏
  • 举报
回复
跟编译器没有关系,跟执行程序时内存分配有关系。没有那么长的连续内存程序就会出错。
一般程序执行时分配内存是没有问题的。
可以写个程序测试一下。
malloc();
看分配多大的内存会出错。
lei001 2006-08-21
  • 打赏
  • 举报
回复
取决于内存大小的
JavaerRobertLi 2006-08-21
  • 打赏
  • 举报
回复
会不会跟具体用的什么编译器有关呢?
Norris_Zhang 2006-08-21
  • 打赏
  • 举报
回复
新手:

如是连续内存有多大就有多长,那如果写好的程序换一个机器,没有那么长的连续内存怎么办?
飞哥 2006-08-21
  • 打赏
  • 举报
回复
最后一个貌似贴题
其他的好像都跑了
  • 打赏
  • 举报
回复
Win32下32位的编译器的话,理论是4G,实际上 是差不多2G
zhenhaojia 2006-08-21
  • 打赏
  • 举报
回复
连续内存可以开多大,字符串就可以有多长。通常根操作系统相关。
自己malloc一下就ok了。
xyly30 2006-08-21
  • 打赏
  • 举报
回复
可以用大整数问题的思想来扩充呢。
DraculaW 2006-08-21
  • 打赏
  • 举报
回复
或許 char a[]最大應該不超過 一個long int的長度吧。。。。。
ningzhiyu 2006-08-20
  • 打赏
  • 举报
回复
signed char-128~127
unsigned char 0--255
这是两种数据变量的取值范围
ningzhiyu 2006-08-20
  • 打赏
  • 举报
回复
可以获得的连续内存有多大,字符串就可以多长……字符串只是由'\0'结束的连续内存
seas110 2006-08-20
  • 打赏
  • 举报
回复
字符??字符串?

字符串的话,可以很长,,,听说我们用的,都不会超过它的最长限制
mydaisy 2006-08-20
  • 打赏
  • 举报
回复
signed char-128~127
unsigned char 0--255
zhj007 2006-08-20
  • 打赏
  • 举报
回复
路过
同是新手

33,323

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧