Tag: 数组

如何将时间转换为c中的ac字符串?

我想在.c文件中写一些.txt文件,但需要用当前时间戳作为后缀来命名该文件,就像filename_2010_08_19_20_30一样。 所以我必须首先定义文件名char数组并自己处理文件名?逐个分配字符? 有没有简单的方法呢?

将修改后的数组值传递回C中的main函数

对不起,如果标题仍然含糊不清。 我正在为学校做这个任务,下面是我定义的函数原型,main函数和change_array函数。 该程序的总体目标是允许用户输入5个不同的数字并存储到数组中。 那么change_array函数的作用是将任何低于10的数字加倍(乘以2),但是,它目前没有按照预期的方式进行。 我真的被卡住了,所以我想知道是否有人可以指出我的错误。 我不是要求一个确切的答案,我只需要一些指示和指导。 出现问题的是change_array函数没有改变用户给出的任何值。 因此,例如,如果用户输入“3,5,6,12,32”,则我的程序的输出仍然是“3,5,6,12,32”。 但是我真正想要的是,在从change_array函数传回数组之后,“6,10,12,12,32”。 编辑完整的程序: #include #define SIZE 5 void fill_array(double x[], int s); void change_array(double x[], int s); void print_array(double x[], int s); main() { double x[SIZE]; fill_array(x, SIZE); printf(“The array is as: \n”); print_array(x, SIZE); change_array(x, SIZE); printf(“After change, the array is: \n”); print_array(x, SIZE); } void fill_array(double […]

为什么我会出现分段错误?

我正在尝试编写一个程序,它接收一个明文文件作为它的参数并解析它,将所有数字加在一起,然后打印出总和。 以下是我的代码: #include #include #include static int sumNumbers(char filename[]) { int sum = 0; FILE *file = fopen(filename, “r”); char *str; while (fgets(str, sizeof BUFSIZ, file)) { while (*str != ‘\0’) { if (isdigit(*str)) { sum += atoi(str); str++; while (isdigit(*str)) str++; continue; } str++; } } fclose(file); return sum; } int main(int argc, char […]

对于结构变量,为什么初始化器{21,19,3.6}与{{21,19},3.6}相同,但反之亦然?

在下面的例子中,我用两个结构test1和test2来说明这个。第一个有两个元素 – 一个大小为2的整数数组,和一个浮点元素。第二个结构有3个元素,2个整数和1个浮点数。 我为test1初始化了两个结构变量s1和s2 : s1={{23,52},2.5},s2={21,19,3.6}; 两者都工作正常,即使对于s2我已经取出括起数组元素的大括号。它没有警告工作正常,输出正确。但是当我为test2初始化2个变量时如下: v1={{23,52},2.5},v2={21,19,3.6}; 当我尝试打印出v1的值时输出不正确,这些是我在编译时得到的警告: warning: braces around scalar initializer| warning: (near initialization for ‘v1.list1’)| warning: excess elements in scalar initializer| warning: (near initialization for ‘v1.list1’)| ||=== Build finished: 0 errors, 4 warnings ===| 基于此前提,请清除以下产生的疑问: 问题:如果使用v1={{23,52},2.5}而不是v1={23,52,2.5}会使编译器混淆前两个数字是结构的不同整数元素还是整数数组元素的一部分结构,那么为什么不使用s2={21,19,3.6}而不是s2={{21,19},3.6}混淆编译器认为结构varialbe s2有3个元素(2个整数元素和1个浮动),而不是2个元素(一个大小为2的整数数组和一个浮点数)?我特别想了解的是为什么关于v1的初始化的第一个案例是错误的。 #include struct test1{ int list[2]; float rate; }s1={{23,52},2.5},s2={21,19,3.6}; //Works fine struct test2{ int list1; […]

你如何在C中移动数组的起始索引?

我试图在C中切换一个int数组的起始索引。准确地说,我有以下数组: { int array[4] = {1,2,3,4};} 我希望将{array}更改为包含{2,3,4}的3个项目的数组。 我想知道是否有一种简单的方法来使用指针并且不移动数组中的所有元素。 如果{array}仍然是4个项目的数组,只要前3个项目是{2,3,4},我也很高兴。 我尝试了以下方法: {array = &(array[1])} 但是,这不起作用,我从类型’int *’}中分配类型’int [4]’时出现{不兼容类型’的错误。 我的印象是C数组是对数组第一个元素的引用。 谁能帮我这个?

如何从C中的新虚拟页面分配内存?

我正在分析在创建维度PageSize x PageSize的二维数组时跨虚拟页面分配的效果。 我的机器的页面大小是4096.我有一个4096个整数指针(列)的数组,指向4096个整数(行)。 我想在新的虚拟页面开始分配第一个整数指针。 如何识别当前内存位置是否为新页面? 有一次,我已经确定了,我相信我可以写一些垃圾值并将指针移动到一个新的虚拟页面。 这就是我分配数组的方式。 array = malloc(ncolumns * sizeof(int *)); for(j = 0; j < ncolumns; j++) { array[j] = malloc(nrows * sizeof(int)); if(array[j] == NULL) { reportError(8);} }

Malloc,strlen,strcat

以下是我正在编写的程序开头的一段代码(包含错误)。 char *name; char *name2; if (argn != 2) { printf(“You have to enter the name of the input file”); return 1; } name = malloc(strlen(arg[1]) + 1); name2 = malloc(strlen(arg[1]) + 1); strcpy(name, arg[1]); strcpy(name2, arg[1]); strcat(name2, “-results.pdb”); 这里有一个错误,就是strcat ,实际上name2没有足够的大小来执行上面的操作。 然而strcat执行没有问题。 然而,稍后在程序的一个完全不相关的部分中,在此strcat之后初始化的另一个数组的操作会产生错误。 它是一个整数数组,我为其元素赋值,并在分配所有值之前给出错误。 我假设因为在name2上没有足够的内存用于上面的操作,所以“某种程度上”会影响下一个初始化的数组。 我想了解: 1-这里可能发生什么,以便无法写入name2的额外信息会影响后面声明的其他数组? 2-我可能无法在更复杂的程序中轻易地回溯这个问题,因为错误发生在其他地方而不是strcat中。 我怎样才能防止这种偷偷摸摸的错误,如memory problematic进程影响其他地方完全不相关的数组?

我们怎么知道这是数组中的最后一个元素?

我有以下代码: int array[5] = {1, 0, 1, 0, 0}; int i; for(i = 0; i < 5; i++) { if(array[i] == 1) { printf("found one\n"); } } 我们怎么知道array的第二个1是我们找到的最后一个? 我不是说保留最后1的值,我的意思是我们应该怎么知道第二个1是最后一个出现,不再出现?

函数原型中的参数

我的问题是:当我在C中编写函数原型时,如下所示: void foo(int *vector); 这是一回事: void foo(int vector[MAX_LENGTH]); 到函数,总是作​​为指针传递? 代码是一样的吗? 提前致谢。

从C函数返回指针是好/坏设计?

我想知道来自C函数的返回指针是好/坏设计? 如果这是一个不好的做法,在下面的例子中,这将是一个好习惯: 问题是继续部分: c函数返回静态变量 在data.h文件中: #include #include typedef struct { int age; int number; } person; person * getPersonInfo(); 在data.c #include “data.h” static struct person* person_p = NULL; person * getPersonInfo() { person_p = (struct person*)malloc(10 * sizeof(struct person)); return person_p; } 在main.c #include “data.h” int main() { person* pointer = getPersonInfo(); return 0; } […]