Tag: 数组

大数组在C中给出了分段错误

我是C的新手,所以如果这是一个绝对的初学者问题,我很抱歉,但是当我构建大型数组时,我遇到了分段错误,我正在做的相关内容是: unsigned long long ust_limit; unsigned long long arr_size; /* ust_limit gets value around here … */ arr_size = ((ust_limit + 1) / 2) – 1; unsigned long long numbs[(int)arr_size]; 这适用于某些ust_limit值,但是当它超过大约4.000.000时会发生分段错误。 我想要的是检测可能的段错误并优雅地失败。 如何知道哪些值会导致分段错误。 而且,这是平台依赖的吗?

关于C中指针和字符串的问题

可能重复: C中的char s []和char * s有什么区别? char * str =“…”和char str [N] =“……”之间的区别? 我有一些令我困惑的代码。 #include #include int main(int argc, char *argv[]) { char* string1 = “this is a test”; char string2[] = “this is a test”; printf(“%i, %i\n”, sizeof(string1), sizeof(string2)); system(“PAUSE”); return 0; } 当它输出string1的大小时,它打印4,这是预期的,因为指针的大小是4个字节。 但是当它打印string2时,它输出15.我认为数组是一个指针,所以string2的大小应该与string1相同吗? 那么为什么它为相同类型的数据(指针)打印出两种不同的大小呢?

在C中不使用sizeof查找数组的大小

我正在寻找一种方法来在C中查找数组的大小而不使用C中的sizeof ,我找到了以下代码: int main () { int arr[100]; printf (“%d\n”, (&arr)[1] – arr); return 0; } 任何人都可以请你解释一下它是如何工作的?

如何在C中制作动态大小的数组?

我已经习惯了PHP,但我开始学习C.我正在尝试创建一个逐行读取文件并将每行存储到数组的程序。 到目前为止,我有一个逐行读取文件的程序,甚至可以打印每行,但现在我只需要将每行添加到数组中。 我的朋友昨晚告诉了我一些关于它的事。 他说我必须在C中使用多维数组,所以基本上是array[x][y] 。 [y]部分本身很简单,因为我知道每行的最大字节数。 但是,我不知道该文件将有多少行 。 我想我可以让它循环遍历文件,每次只增加一个整数并使用它,但我觉得可能有一种更简单的方法。 任何想法甚至暗示正确的方向? 我感谢任何帮助。

为什么此数组的所有剩余值都初始化为零?

你好我是C编程语言的初学者,最近我开始学习数组 ,我研究过默认情况下int数组中的所有值都是垃圾 。 那么为什么我在这两种情况下得到不同的价值观。 情况1 int arr[5]; 在这种情况下,从arr [0]到arr [4]我们将有垃圾值,但在下一种情况下。 案例2 int arr[5] = {1}; 在这种情况下,arr [0]将具有值1,并且从arr [1]到arr [4]的剩余值将为0。 我的问题是,在case-1中,每个未初始化的arrays位置都有垃圾valeus,那么为什么在2-case剩余的未初始化arrays位置具有0作为默认值。

如何以字节为单位获取字符串大小?

正如标题所暗示的,我的问题是如何在C获取字符串的大小。 如果我在没有malloc的函数中声明它(字符串),那么使用sizeof是否malloc ? 或者,如果我已将其声明为指针? 如果我用malloc初始化它会怎么样? 我想做一个详尽的回复。

C静态数组初始化 – 我需要多么详细?

要使用全零来初始化int数组,我是否需要使用: int foo[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 或者,这会工作: int foo[10] = {0};

通过一个实际例子,数组和指针之间的异同

给出以下代码: #include #include int main() { int a[1]; int * b = malloc(sizeof(int)); /* 1 */ scanf(“%d”, &a); printf(“%d\n”, a[0]); /* 2 */ scanf(“%d”, &b); printf(“%d\n”, b[0]); return 0; } 编译时获得以下警告(i686-apple-darwin9-gcc-4.0.1): array.c: In function ‘main’: array.c:9: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int (*)[0u]’ array.c:14: warning: format ‘%d’ expects […]

分配大型(5000+)arrays

我正在处理一个应用程序,如果输入的数据有三种可能的大小: 小:1000个元素 中= 5000个元素 大= 500,000个元素 问题是我无法分配大型数组。 似乎不接受大于5000的尺寸。 我执行以下操作时出现运行时错误: long size=1000; char ch; int arr[size]; ch=getch(); if(ch==..) size=…; 1000和5000的尺寸似乎工作正常,但我怎样才能以这种方式制作500k的arrays?

检索16k键值对的最快方法是什么?

好的,这是我的情况: 我有一个函数 – 比方说U64 calc (U64 x) – 它采用64位整数参数,执行一些CPU密集型操作,并返回64位值 现在,鉴于我事先知道了该函数的所有可能输入( x s)(虽然有大约16000),我认为预先计算它们然后根据需要获取它们(从类似数组的结构)可能更好)。 理想的情况是将它们全部存储在某个数组U64 CALC[]并通过索引检索它们(再次为x ) 这就是问题所在:我可能知道我的calc函数的可能输入是什么,但它们绝对不是连续的 (例如,不是从1到16000,而是可能低至0且高达数万亿的值 – 总是具有64位范围) 例如 X CALC[X] ———————– 123123 123123123 12312 12312312 897523 986123 etc. 这是我的问题: 你会如何存储它们? 您更喜欢哪种解决方法? 现在,鉴于这些值(来自CALC ) 每秒必须访问数千到数百万次 ,这将是性能最佳的解决方案吗? 注意 :我没有提到我曾经想过或试过的任何事情,以免把答案变成A和B类型的辩论,而且大部分都没有影响到任何人……