Tag: 数组

ISO C禁止在C中使用空的初始化程序括号

我有这样的结构: typedef struct { int a; int b; int c; int d; } Hello; 然后我以这种方式宣布它: Hello hello[6] = {}; 然后我得到了这个警告:ISO C禁止空初始化器括号,无论如何我认为我需要初始化它,如何以正确的方式做到这一点?

字符串数组C的分段错误

我创建了一个程序,将一个字符串分成由空格分隔的标记,然后将每个单独的字符串复制到一个字符串数组中。 程序运行正常,直到它达到for循环,并在成功将第一个字符串添加到数组并打印它之后,程序崩溃。 我调试了它,发现了 args[i] = malloc((strlen(comm_str) + 1) * sizeof(char)); 返回SEGFAULT然后第二次执行循环。 同样调用堆栈打印出以下内容: 地址:75F943F9,function:strlen(),文件:C:\ Windows \ syswow64 \ msvcrt.dll。 我试图自己纠正程序,但没有结果。 我一开始认为循环尝试访问超出绑定区域,但我认为我已正确地对所有内容进行了malloc。 #include #include #include int main(){ char **args = NULL; char input[] = “cmdline -s 20 -r -t parameter -p 20 filename”; int num = 0; char *comm_str = strtok(input, ” “); /*Tokens command line*/ while(comm_str […]

GDB在arrays初始化时报告“当前上下文中没有符号”

我试图初始化一个大小为ceil(buflen / 125.0)的数组,如下所示: long long maxjpg = ceil(buflen/125.0); long long arr[maxjpg]; 我没有收到编译器错误,但GDB报告“当前上下文中没有符号’arr’”。 我发现的唯一修复方法是将数值硬编码到数组大小中,如下所示: long long arr[5]; 我尝试使用const和这些方法的任意组合使用不同的变量类型进行转换。 我知道ceil会返回一个double ,我也尝试过使用它。 初始化值并将其打印如下工作: arr[0] = 25; printf(pos 0 is %d\n”, arr[0]); 输出: pos 0 is 25 在该修改之后打印arr[0]到GDB导致“值已被优化”。 重现的最低可行代码: #include int main(void){ long long size = ceil(123.45); long long arr[size]; return 0; } GDB Fedora 7.4.50.20120120-52.fc17

是否有算法在线性时间内计算数组反转?

我知道使用增强的合并排序可以在O( n log( n ))操作中计算n元素数组中的反转次数。 但是,我遇到了一个不同的解决方案,它以某种方式设法计算O( n )时间内的反转次数,前提是输入是(1,2,3,…, n -1, n )的置换: 编辑:- 我很抱歉我粘贴的代码因为它在所有情况下都不起作用。 实际上这个代码用于这个问题 ,它通过了所有的情况。 但我仍然离开代码,以便它可以作为一些直觉,也许这个问题的线性时间解决方案将会出现。 注意: – 下面提到的代码不正确。 /* int in = 0; for (int i = 0; i < n; i++) { a[i] = a[i] – i – 1; } for (int i = 0; i 0) in = in + a[i]; […]

C中的钻石arrays排序

我在C中有以下作业。我基本上需要一种方法而不是解决方案。 我们有一个13 x 13arrays。 在arrays中,我们需要考虑钻石形状。 钻石之外的所有东西都被初始化为-1(不重要)。 示例5 x 5arrays – xx 1 xxx 2 2 2 x 3 3 3 3 3 x 4 4 4 x xx 5 xx x=-1 现在在这个数组中,每个条目的菱形中的值包含11位。 5 lsb包含一个数据(色调),另外6个包含另一个数据(直径)。 我们需要逐行地对数据进行排序,对于色调进行单调排序,然后逐列地对直径进行单调排序。 这样做最有效和最节省内存的方法是什么? 因为我们需要保存这个,所以最好是交换条目而不是创建另一个数组。 最后,我们将得到一个排序的钻石arrays(仍然是-1s)。 非常感谢你们!

C中的整数中的特定数字计数

例如:如果用户输入是11234517并且想要在此输入中看到1的数字,则输出将是“1的数字是3.我希望您理解我的意思。 我只能计算整数中的位数。 #include int main() { int n, count = 0; printf(“Enter an integer number:”); scanf(“%d”,&n); while (n != 0) { n/=10; count++; } printf(“Digits in your number: %d”,count); return 0; } 也许arrays是解决方案。 任何帮助,将不胜感激。 谢谢!

C / C ++数组赋值

示例代码: int ar[3]; ………… ar[0] = 123; ar[1] = 456; ar[2] = 789; 有没有办法让它缩短? 就像是: int ar[3]; ………… ar[] = { 123, 456, 789 }; 我不需要解决方案: int ar[] = { 123, 456, 789 }; 定义和初始化必须是分开的。

C编程语言中的指针数组(第5.6章)示例

我的理解是,一旦指针初始化为字符串常量,就不能修改字符串。 我尝试过执行修改,程序崩溃了。 该理论在Brian W. Kernighan和Dennis M. Ritchie的C编程语言的第5.5章“字符指针和函数”中给出。 但是,有一个在数组中存储指针的例子(第5.6章),其中指针的内容被修改。 该计划如下: #include #include #define MAXLINES 5000 /* max #lines to be sorted */ #define MAXLEN 1000 char *lineptr[MAXLINES]; /* pointers to text lines */ char *alloc(int); int readlines(char *lineptr[], int nlines); int getline(char *, int); void writelines(char *lineptr[], int nlines); main() { int nlines; /* number of […]

使这个C数组处理代码更加python(甚至numpy)

我试图了解python的惊人列表处理能力(最终是numpy)。 我正在转换我编写的一些C代码到python。 我有一个文本数据文件,其中第一行是标题,然后每个奇数行是我的输入数据,每个偶数行是我的输出数据。 所有数据空间分开。 我很高兴能够使用嵌套列表推导将所有数据读入列表。 太棒了。 with open(‘data.txt’, ‘r’) as f: # get all lines as a list of strings lines = list(f) # convert header row to list of ints and get info header = map(int, lines[0].split(‘ ‘)) num_samples = header[0] input_dim = header[1] output_dim = header[2] del header # bad ass list comprehensions […]

C中的数组地址减法

可能重复: C中的指针算法 码: int main() { int a[ ] ={0,1,2,3,4}; char c[ ] = {‘s’,’a’,’n’,’j’,’u’}; printf(“%d\n”,&a[3]-&a[0]); printf(“%d\n”,&c[3]-&c[0]); return 0; } 为什么两者的输出都是3 3,如果我们考虑地址的差异,两者都会有所不同?