标题: 请问,怎么建立字符a开头的10亿个char变量啊? [打印本页]
作者: zzz19760225 时间: 2024-10-8 20:12 标题: 请问,怎么建立字符a开头的10亿个char变量啊?
没有成功- #include <stdio.h>
- int main() {
- for(int b = 0; b < 1000000000; b=b+1) {
- char ab = 'c'; // 初始化为'c'
- }
- printf("%c\n",a123);
- return 0;
- }
复制代码
作者: Five66 时间: 2024-10-8 21:14
1,使用代码生成,也就是用其他语言来生成包含对应变量的C代码,但是这不现实,就算1行包含1万个变量,也要1千万行,源文件非常非常大,而且这么多变量,程序栈早就撑爆了
2,申请一个包含10亿个char的内存空间,每个空间对应1个变量,但是10亿个char需要好多好多(9个多G)的内存(ram),而且不一定能成功
作者: zzz19760225 时间: 2024-10-9 07:46
本帖最后由 zzz19760225 于 2024-10-9 07:58 编辑
我以为一个char变量是1字节,10亿约1GB的呢
搜索的内容显示的是数组模式,就看看能不能将一个一个定义字符的char变量,做成批量生产散定义顺序号的。
原来不是想的那么可批量啊
通义千问2.5给的答案也是数组的。我是希望那种单个自由度的变量单元,散装的。- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <windows.h>
- #include <string.h>
- //#include <graphics.h>
- //#include <easyx.h>
-
- int main() {
- // 动态分配1亿个char的空间
- char *data = (char *)malloc(1000000000 * sizeof(char));
- if (data == NULL) {
- fprintf(stderr, "Memory allocation failed\n");
- return 1;
- }
-
- // 初始化数组(可选)
- for (size_t i = 0; i < 1000000000; ++i) {
- data[i] = 'A'; // 或者任何其他初始化值
- }
-
- // 你的代码...
- data[456]='c';
- printf("%c\n",data[123]);
- printf("%c\n",data[456]);
- // 当不再需要这些数据时,释放内存
- free(data);
-
- return 0;
- }
复制代码
作者: Five66 时间: 2024-10-9 15:03
咦,确实10亿约1GB的呢,算多了一位
序号那种定义是脚本语言的功能,本质上也是动态分配的,C又不是脚本语言,想用就自己嵌入一个脚本引擎(
自己设计或者用现成的,例如lua,ruby,python之类的)
作者: jyswjjgdwtdtj 时间: 2024-10-9 22:05
本帖最后由 jyswjjgdwtdtj 于 2024-10-9 22:10 编辑
回复 1# zzz19760225
int可以到十亿吗?我记得c++的int是两个字节
没太明白你的需求呢 生成一个巨长的char数组有什么意义呢?
作者: zzz19760225 时间: 2024-10-10 07:21
本帖最后由 zzz19760225 于 2024-10-10 09:02 编辑
回复 zzz19760225
int可以到十亿吗?我记得c++的int是两个字节
没太明白你的需求呢 生成一个巨长 ...
jyswjjgdwtdtj 发表于 2024-10-9 22:05
想模拟DOS的储存点阵和显存点阵,通用于计算机规律的标准变量。一个变量代表一个储存阵列的单元
在变量为单元基础上考虑通用点阵字符集阵列(以代码编码为内容的字符集,其必然有编码对应的容器图形规律习惯,形的集合集中,就最后都归并到点阵为相近的无限里有限大小字体,就如以人命的科学规律,归并在通用的结构功能点阵队伍里)和其他相关内容。
DOS是64KB,1MB,1GB的范围,所以想选择1GB做一个初步尝试。(以前想用文本,一个文本一个二进制,后来发觉不行,好像太大了。其实倒是可以考虑文本为一个字节,但是实际操作应该没有内存耐用,写内存与写硬盘的损耗)
(通过自由度的基本单元,去企图尝试广义的汉字DOS可能。人人可以操作的过程,相对不受技术行业公私企业封闭影响的自由度的玩具汉字DOS)
(你以前有发过的API,也尝试了,要是能成为一个信息机器处理信息,会不会不需要编程编译软件,但是不会用,我机器上做不出dll文件。后来综合起来,不会VBS,VB,又需要界面,需要相对比较好的信息处理,就得用c编程软件)
作者: zzz19760225 时间: 2024-10-11 10:04
本帖最后由 zzz19760225 于 2024-10-11 12:00 编辑
用多维数组,9个10叠加10亿?
但是并不能显示- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <windows.h>
- #include <string.h>
- //#include <graphics.h>
- //#include <easyx.h>
-
- int main() {
- char a[10][10][10][10][10][10][10][10][10]={'n','n','n','n','n','n','n','n','n','n'};
- printf("%c\n",a[1]);
- return 0;
- }
复制代码
通义千问2.5的解答,输出还是不行。- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <windows.h>
- #include <string.h>
- //#include <graphics.h>
- //#include <easyx.h>
-
- int main() {
- // 声明一个多维数组
- char a[10][10][10][10][10][10][10][10][10];
-
- // 初始化数组(可选)
- for (size_t i0 = 0; i0 < 10; ++i0) {
- for (size_t i1 = 0; i1 < 10; ++i1) {
- for (size_t i2 = 0; i2 < 10; ++i2) {
- for (size_t i3 = 0; i3 < 10; ++i3) {
- for (size_t i4 = 0; i4 < 10; ++i4) {
- for (size_t i5 = 0; i5 < 10; ++i5) {
- for (size_t i6 = 0; i6 < 10; ++i6) {
- for (size_t i7 = 0; i7 < 10; ++i7) {
- for (size_t i8 = 0; i8 < 10; ++i8) {
- a[i0][i1][i2][i3][i4][i5][i6][i7][i8] = 'A'; // 或者任何其他初始化值
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- // 你的代码...
- printf("%c\n",a[0][1][2][3][4][5][6][7][8]);
- return 0;
- }
复制代码
作者: Five66 时间: 2024-10-11 18:46
回复 5# jyswjjgdwtdtj
16位编译器的int才是2字节,一般对应16位系统
作者: Five66 时间: 2024-10-11 18:51
回复 7# zzz19760225
main中的变量默认是自动变量(局部变量),储存在栈上,栈空间大小是有限的(只有几m),10亿个char这么大的数组肯定不行
作者: zzz19760225 时间: 2024-10-11 21:00
本帖最后由 zzz19760225 于 2024-10-18 12:10 编辑
- 百度“C语言WIN栈空间为1GB”:
- “在C语言中,默认的WIN系统栈空间通常不会有1GB这么大,通常是几兆字节。在Windows系统中,默认的线程栈大小是1MB。如果你想要设置更大的栈空间,可以在创建线程时指定。
- 以下是一个创建线程并指定栈大小的例子:”
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <windows.h>
- #include <string.h>
- //#include <graphics.h>
- //#include <easyx.h>
-
- DWORD WINAPI ThreadProc(LPVOID lpParam){ /*[1]线程工作代码*/return 0; }
-
- int main()
- {
- HANDLE hThread;
- CONST SIZE_T stackSize = 1024 * 1024 * 1024 ; //原本1024*1024*100
-
- hThread = CreateThread(
- NULL, // default security attributes
- stackSize, // use a 1000MB stack size
- ThreadProc, // thread function name
- NULL, // argument to thread function
- 0, // use default creation flags
- NULL); // returns the thread identifier
-
- // Check the return value for success.
- // ...
-
- return 0;
- }
复制代码
静态数组复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |