我有一个无效function void foo(int *ptr) { //trying to allocate memory to hold 5 ints ptr = malloc(sizeof(int)*5): //I loop ptr and assign each with a value i =0 to 4; } 在主要function我有这条线 int main() { int *num; //I called the function foo(&(num)); free(num); return 1; } 我得到munmap_chunk()无效指针错误。 我确实试图挖掘更多信息,但我无法弄清楚这一点。 我知道这对那些在c工作的人来说是基本的。 我以为我通过引用传递它应该工作,但事实并非如此。 我是C的新手,到目前为止一直很头疼。
我正在尝试编写一个搜索数组查找指定键的函数。参数n指定数组的有效大小,必须根据strcmp强加的字典顺序进行排序。如果找到键,则函数返回数组中出现该键的索引。因此,它可以返回子字符串的索引。但是,它出现了两个我无法解决的错误。请帮忙。 jiebin@jiebin-ThinkPad-Edge-E530:~/Program_C/programming_abstractions_in_c/FindStringInSortedArray$ gcc FindStringInSortedArray.c -o FindStringInSortedArray FindStringInSortedArray.c: In function ‘FindStringInSortedArray’: FindStringInSortedArray.c:7:3: warning: passing argument 1 of ‘strlen’ from incompatible pointer type [enabled by default] /usr/include/string.h:399:15: note: expected ‘const char *’ but argument is of type ‘char **’ jiebin@jiebin-ThinkPad-Edge-E530:~/Program_C/programming_abstractions_in_c/FindStringInSortedArray$ 这是我的代码: #include #include int FindStringInSortedArray(char *key,char *array[],int n) { int mid,cmp; int low=strlen(array)-n; int high=n; if(low > […]
花了很长时间才使这个代码工作,有人可以向我解释为什么我需要2个星,当我将指针传递给字符串作为函数的参数时? 根据定义,指针将地址保存到将放置特定变量的存储器中。 所以它是一个变量,它有自己的地址,在这个地址下是另一个变量的地址。 好的。 因此,如果我将指针传递给函数,我会使用&符号,因为我必须将指针地址传递给函数。 精细。 但接下来会发生什么。 该函数接收存储器中该指针所在的信息。 好的。 这就是我的理解。 我不明白的是为什么我在定义函数及其参数时需要两颗星。 我传递一个指向char变量的指针。 为什么不取消wpisuj(char * w)。 为什么wpisuj(char ** w)。 内存分配对我来说是不可理解的 – 我使用malloc保留内存,malloc返回此内存的地址,因此我将此地址作为变量w的值。 然后再一些我不明白的东西,如果* w是指针并将新创建的位置的地址保存在内存中,为什么我使用* w来放置一个字符串。 它应该不是*(* w)吗? 由于* w是保留存储器的地址,因此*(* w)是该存储器的内容。 加起来。 我不明白的是:1)为什么wpisuj(char ** w)而不是wpisuj(char * w)2)为什么strcpy( w,bufor)而不是strcpy( (* w),bufor) #include #include #include # define SIZE 256 void wpisuj(char** pw){ char bufor[256]; scanf(“%s”, bufor); int l; l=strlen(bufor)+1; […]
我是C的新手,我正在阅读K&R的“The C Programming Language”来学习它。 我对第2版第109页上出现的这个示例函数有疑问: /* readlines: read input lines */ int readlines(char *lineptr[], int maxlines) { int len, nlines; char *p, line[MAXLEN]; nlines = 0; while ((len = getline(line, MAXLEN)) > 0) if (nlines >= maxlines || p = alloc(len) == NULL) return -1; else { line[len-1] = ‘\0’; /* delete newline */ strcpy(p, […]
我想在c中这样做: scanf(“%d”,a+i); 其中a是大小为10的数组。 而i反对循环。 这可能吗?
我正在读一本关于“ 理解和使用c指针 ”的指针的书 谈到void *它说 它有两个有趣的属性: 指向void的指针将具有与char指针相同的表示forms和内存对齐方式。 令人困惑的是不是所有指针的记忆都相同吗? 他们为什么不代表写入void *与普通提到的char指针的普通指针相同? 真的很感激任何帮助
我正在尝试编写一个程序,它接收一个明文文件作为它的参数并解析它,将所有数字加在一起,然后打印出总和。 以下是我的代码: #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 […]
fgets()函数是否自动将文件指针移动到位置,直到我提到的大小参数为止? 例如 : p.txt文件的内容是“我是个好孩子”。 使用fgets(a,5,fp1)后文件指针向前移动5个位置? 在任何一本书中都找不到这个。 因此查询。
我试图在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数组是对数组第一个元素的引用。 谁能帮我这个?
我有一个文件,我读入一个char数组。 char数组现在拥有一定数量的字节,现在如果我知道文件存储了一个32位整数的小端,位于0x8位置,我如何从char数组中检索它? FILE * file = fopen(“file”); char buffer[size]; fread(buffer,1,size,file); int = buffer[0x8]; // What should I do here? // I imagine it involves some strange pointer // arithmetic but I can’t see what I should do, // casting to int just takes the first byte, // casting to (int *) doesn’t compile