我想找到一个指针数组中的重复项。代码如下所示。当我运行这个应用程序时,它是gining分段错误。但是当我提取这个function时,我能够运行它就好了。任何人都可以告诉我能做什么? 当我检测到重复项时,我只是将这些字符串放到名为output.txt的文件中。 我发现当使用strcmp时,它会给出这个分段错误。 但是当我提取这个函数并在一些测试代码上运行它时,它工作得非常好。 main() { char *a[20]; DIR *dip; int i = 0; dip = opendir(“src/my_folder”); char *condition_var; while ((dit = readdir(dip)) != NULL) { condition_var = dit->name; a[i] = condition_var i++; } findduplicates(a,i); } char *findduplicates(char *arr[3],int count) { int i = 0; int j = 0; int val = 0; FILE *output […]
我有一个C程序: #include int main(){ int b = 10; //assign the integer 10 to variable ‘b’ int *a; //declare a pointer to an integer ‘a’ a=(int *)&b; //Get the memory location of variable ‘b’ cast it //to an int pointer and assign it to pointer ‘a’ int *c; //declare a pointer to an integer ‘c’ c=(int […]
我正在尝试通过指向指针的方式设置链表头。 我可以在函数内部看到头指针的地址正在改变但是当我返回主程序时它再次变为NULL。 谁能告诉我我做错了什么? #include #include typedef void(*fun_t)(int); typedef struct timer_t { int time; fun_t func; struct timer_t *next; }TIMER_T; void add_timer(int sec, fun_t func, TIMER_T *head); void run_timers(TIMER_T **head); void timer_func(int); int main(void) { TIMER_T *head = NULL; int time = 1; fun_t func = timer_func; while (time time = sec; new_timer->func = func; new_timer->next […]
只是试图真正让我的头围绕C中的数组和指针以及它们之间的差异,并且在使用2d数组时遇到了一些麻烦。 对于普通的1Darrays,这是我所学到的: char arr[] = “String constant”; 创建一个字符数组,变量arr将始终表示初始化时创建的内存。 char *arr = “String constant”; 创建一个指向char的指针,该指针当前指向char数组“String constant”的第一个索引。 指针可以稍后指向其他地方。 char *point_arr[] = { “one”, “two”,”three”, “four” }; 创建一个指针数组,然后指向char数组“one”,“two”等。 我的问题 如果我们可以同时使用: char *arr = “constant”; 和 char arr[] = “constant”; 那为什么我不能用: char **pointer_arr = { “one”, “two”, “three”, “four” }; 代替 char *pointer_arr[] = { “one”, “two”, “three”, “four” […]
在读这个 (精神病学给出的答案)时,我理解了如何输入type并调用函数指针。 但在考虑了typedef之后,我尝试了一点,并且能够以这种方式调用函数: typedef void func(unsigned char); void test(unsigned char a); int main() { unsigned char b=0U; func *fp=&test; while(1) { fp(b); b++; } } void test(unsigned char a) { printf(“%d”,a); } 我不明白使用函数指针语法和这种方法有什么区别? 两者似乎几乎产生相同的function。
愚蠢的问题,但试图掌握潜在的机制/哲学来巩固我的理解。 int myInt; // declares a variable of type integer, named myInt. Intuitive. int* myPtr; // declares a variable of type pointer-to-integer. Also intuitive. int myInt2, myInt3; // two more integer variables.. yay!! This makes sense. // so the pattern is [type] [identifier] ; int* myInt4, myInt5; // an int pointer then an integer. Brain […]
我有两个指向同一个C字符串的指针。 如果我将第二个指针递增1,并将第二个指针的值赋给第一个指针的值,我希望改变第一个字符串的第一个字符。 例如: #include “stdio.h” int main() { char* original_str = “ABC”; // Get pointer to “ABC” char* off_by_one = original_str; // Duplicate pointer to “ABC” off_by_one++; // Increment duplicate by one: now “BC” *original_str = *off_by_one; // Set 1st char of one to 1st char of other printf(“%s\n”, original_str); // Prints “ABC” (why not […]
我想我已经把它归结为最基本的情况: int main(int argc, char ** argv) { int * arr; foo(arr); printf(“car[3]=%d\n”,arr[3]); free (arr); return 1; } void foo(int * arr) { arr = (int*) malloc( sizeof(int)*25 ); arr[3] = 69; } 输出是这样的: > ./a.out car[3]=-1869558540 a.out(4100) malloc: *** error for object 0x8fe01037: Non-aligned pointer being freed *** set a breakpoint in malloc_error_break to […]
在C中,何时优先使用一个而不是另一个?
我正在尝试实现通用链表。 节点的结构如下 – typedef struct node{ void *data; node *next; }; 现在,当我尝试为数据分配地址时,假设例如对于int,例如 – int n1=6; node *temp; temp = (node*)malloc(sizeof(node)); temp->data=&n1; 如何从节点获取n1的值? 如果我说 – cout<data)); 我明白了 – `void*’ is not a pointer-to-object type 当我为其分配int的地址时,无效指针是否被转换为int指针类型?