Tag: 数组

在C中动态初始化字符串数组

我知道我可以这样初始化一个字符串数组: static const char *BIN_ELEMENTS[5] = { “0000\0”, // 0 “0001\0”, // 1 “0010\0”, // 2 “0011\0”, // 3 “0100\0”, // 4 }; 但我需要以动态的方式实现这一目标。 从文件中读取字符,并将它们插入到数组中。 然后将该数组复制到字符串数组中(如上所述)。 所以,假设我从文件中捕获了以下字符,并将它们插入到数组中,如下所示: char number[5]; char *listOfNumbers[10]; number[0]=’1′; number[1]=’2′; number[2]=’3′; number[3]=’4′; number[4]=’\0′; 现在我想将整个数字内容复制到listOfNumers[0] //中,这意味着我已将“1234”存储在listOfNumers的第0位。 留下9个位置来存储不同的数字。 所以我会做这样的事情: listOfNumers[0] = number; //this actually seems to work. 但由于它是一个巨大的数字文件,我需要重用数组编号,以提取一个新的数字。 但是当我这样做时,之前存储在listOfNumers [0]中的内容会被覆盖,eventho我更新了新号码的新位置。 我该怎么处理? 这是我到目前为止: char number[5]; […]

涉及char数组的C语句的含义

我正在研究一个项目的算法,我遇到了一些我认为可能有用的代码。 但是,当我尝试阅读代码时,我在理解代码中的语句时遇到了一些困难。 这是代码。 int firstWord[MAX_WORD_SIZE] = {0}, c = 0; while (word1[c] != ‘\0’) //word1 is char[] sent as a parameter { firstWord[word1[c]-‘a’]++; c++; } 我理解(我希望是正确的)第一行是设置我的最大大小的整数数组,并将元素初始化为零,同时使初始计数器值“c”为零。 我知道while循环遍历word1[]数组的所有字符,直到它到达最后的char ‘\0’ 我对第一行firstWord[word1[c]-‘a’]++;的行感到困惑firstWord[word1[c]-‘a’]++; word1[c]应该给一个char,那么-‘a’做什么呢? 这会将char转换为一个整数,允许您访问firstWord[]数组的元素并使用++递增吗? 如果是这样, word1[c]-‘a’给出了哪个元素或整数

如何在c中完美截断字符串?

我正在读取一个文件,其中每行超过63个字符,我希望字符被截断为63.但是,它无法截断从文件中读取的行。 在这个程序中,我们假设文件只有10行: #include #include int main(void) { char a[10][63]; char line[255]; int count = 0; //Open file FILE *fp; fp = fopen(“lines.dat”, “r”); //Read each line from file to the “line array” while(fgets(line, 255,fp) != NULL) { line[63] = ‘\0’; //copy the lines into “a array” char by char int x; for(x = 0; x […]

传递给函数时多维数组的指针类型是什么?

我正在学习大学课程中的C和指针,我认为除了多维数组和指针之间的相似性之外,我对这个概念有很好的把握。 我认为,因为所有数组(甚至多维数组)都存储在连续内存中,你可以安全地将它转换为int* (假设给定的数组是一个int[] 。)但是,我的教授说明星中的星数。定义取决于数组中的维数。 因此, int[]将成为int* , int[][]将成为int**等。 所以我写了一个小程序来测试这个: void foo(int** ptr) { } void bar(int* ptr) { } int main() { int arr[3][4]; foo(arr); bar(arr); } 令我惊讶的是,编译器在两个函数调用上发出警告。 main.c:22:9: warning: incompatible pointer types passing ‘int [3][4]’ to parameter of type ‘int **’ [-Wincompatible-pointer-types] foo(arr); ^~~ main.c:8:16: note: passing argument to parameter ‘ptr’ here void foo(int** […]

指向数组语法的指针

我有关于指向数组的指针语法的问题。 我们知道数组本身就是指针(我们的教授说的是什么)所以为什么当我们用另一个指针指向它们时(它们是指向指针的指针)我们使用这种语法: int array[10]; int *pointer = array; 而不是这种语法: int array[10]; int **pointer = &array; 虽然我知道这是正确的使用malloc但为什么不以正常的方式,它是一个编译器或语法的东西或我错在其他地方?

为什么数组大小为1

可能重复: C编程语言中数组的大小? 我正在尝试编写一个函数,如果值在数组中,则返回1。 这是代码: int inArrayInt(int iVal, int iArray[]) { int i; int arrayL = sizeof(*iArray) / sizeof(int); int flag = 0; for(i=0; i < arrayL; i++) { if(iVal == iArray[i]) { flag = 1; } } return flag; } 问题是arrayL = sizeof(*iArray) / sizeof(int); 始终求值为1,即使数组包含20个元素。 为什么?

Array变量是否指向自身?

我尝试了一些代码来检查数组和指针的行为。 其内容如下。 #include main(){ int s[]={1,2}; int *b=s; printf(“%d, %d, %d\n”, s, &s, *s); printf(“%d, %d, %d\n”, b ,&b, *b); } 最初我认为指针和数组是相同的但是… 令我惊讶的是,’s’和’&s’的价值与’b’不同。 这是否意味着一个数组变量“指向自己?” 我现在也对实际上变量“名称”感到困惑? 如何与内存中的位置进行绑定? 我只是无法想象那里发生的事情! 内存(RAM)中的所有信息都是在运行时存储的?

WIN32和其他c字符串之间的区别

我在一个小程序中得到了这个代码来读取文件: #ifdef WIN32 unsigned char *buffer = (unsigned char *)alloca((unsigned int)ui.length); #else unsigned char buffer[ui.length]; #endif 为什么Win32平台和其他平台的字符数组使用指针?

用于在C中左移2Darrays的function

我正在我的程序中编写一个函数来左移所有传递给函数的数组中的数字。 一个例子是: 1 2 3 4 5 6 变 2 3 4 5 6 1 我的代码是: void LeftShift(int array[][N])/*Get the array from main*/ { int r, c, temp; for(r = 0; r < M; r++) { //Start at row 0 and add one each time for(c = 0; c 0) { array[r][c] = array[r][c-1]; //Number […]

数组声明的方括号内的星号在C 中是什么意思

我正在编写一个自定义C99解析器。 我从这个链接得到了语法。 这个语法说下面是声明数组的有效语法 – int arr[*]; 以下是语法的相关部分 – direct-declarator ::= identifier “(” declarator “)” direct-declarator “[” type-qualifier-list? assignment-expression? “]” direct-declarator “[” “static” type-qualifier-list? assignment-expression “]” direct-declarator “[” type-qualifier-list “static” assignment-expression “]” direct-declarator “[” type-qualifier-list? “*” “]” direct-declarator “(” parameter-type-list “)” direct-declarator “(” identifier-list? “)” 我尝试使用gcc使用此声明编译代码。 它给了我以下警告 – 错误:除函数原型范围外,不允许使用'[*]’ 所以我尝试使用这种类型的语法声明一个函数原型,并且编译时没有任何错误或警告。 我没有得到的是这种语法在语义上可能意味着什么。 有专家解释吗?