可能重复: 可以在其范围之外访问局部变量的内存吗? 我试图理解为什么我得到以下程序的输出 [hello] [0xbfde68f4] [world] [0xbfde68f4] [world] [0xbfde68f4] 该计划是 int main(void) { char **ptr1 = NULL; char **ptr2 = NULL; ptr1 = func1(); ptr2 = func2(); printf(” [%s] [%p]\n”,*ptr1, (void*)ptr1); printf(” [%s] [%p]\n”,*ptr2, (void*)ptr2); printf(” [%s] [%p]\n”,*ptr1, (void*)ptr1); return 0; } char** func1() { char *p = “hello”; return &p; } char** func2() { […]
将指针返回到C中的本地结构是否安全? 我的意思是这样做 struct myStruct* GetStruct() { struct myStruct *str = (struct myStruct*)malloc(sizeof(struct myStruct)); //initialize struct members here return str; } 安全? 谢谢。
以下C片段: […] void f1(void* a){ printf(“f(a) address = %p \n”,a); a = (void*)(int*)malloc(sizeof(int)); printf(“a address = %p \n”,a); *(int*)a = 3; printf(“data = %d\n”,*(int*)a); } void f(void){ void* a1=NULL; printf(“a1 address = %p \n”,a1); f1(a1); printf(“a1 address = %p \n”,a1); printf(“Data.a1 = %d\n”,*(int*)a1); } […] 结果是 a1 address = (nil) f(a) address = (nil) a […]
这是一个初学者的问题:为什么这会打破/给出错误? #include #include #include char *strtrim_right(char *p) { char *end; int len; len = strlen( p); while (*p && len) { end = p + len-1; if(isalpha(*end)) *end =0; else break; } return(p); } int main () { char *x=”PM123BFD”; strtrim_right(x); printf(“%s”, x); return 0; }
我在学习指南中发现了这个问题,我不确定为什么返回指向局部变量/参数的指针会很糟糕。 有任何想法吗?
我试图通过谷歌搜索一个解决方案:我找不到任何有帮助的东西; 它甚至看起来好像我正确地这样做了。 我能找到的关于通过函数发送动态分配的数组的唯一页面处理的是一个结构内部的数组,当然是标量,所以表现不同。 我现在不想使用结构 – 我正在尝试学习DAM并使用指针和函数。 那就是说,我确信这是非常基本的,但我被困住了。 代码编译,但是当我运行可执行文件时它会冻结。 (我正在使用minGW gcc,如果这很重要。而且我现在还不清楚如何使用gdb。) 这是代码(最终,我希望整个代码是类似ArrayList的数据结构): #include #include void add( int element, int *vector); void display_vector( int *vector ); void initialize_vector( int *vector ); int elements = 0; int size = 10; int main(void) { int *vector = 0; initialize_vector(vector); add(1, vector); //add(2, vector); //add(3, vector); //add(4, vector); //add(5, vector); […]
我试着编写自己的strchr()方法实现。 它现在看起来像这样: char *mystrchr(const char *s, int c) { while (*s != (char) c) { if (!*s++) { return NULL; } } return (char *)s; } 最后一行原来是 return s; 但这不起作用,因为s是const。 我发现需要这个演员(char *),但老实说我不知道我在那里做什么:(有人可以解释一下吗?
gcc 4.4.4 我究竟做错了什么? char x[10]; char y[] = “Hello”; while(y != NULL) *x++ = *y++; 非常感谢任何建议。
我需要的是一个函数,修改给定指针2d矩阵,如下所示: void intMatrixAll(int row, int col, int **matrix); 现在,函数应该分配内存并且可以使用矩阵。 行和列在运行时给出。 #include #include #define PRINTINT(X) printf(“%d\n”, X); void intMatrixAll(int row, int col, int **matrix); int main(void) { int testArrRow = 4; int testArrCol = 6; int **testMatrix = NULL; intMatrixAll(testArrRow, testArrCol, testMatrix); testMatrix[2][2] = 112; //sementation fault here 🙁 PRINTINT(testMatrix[2][2]); system(“PAUSE”); return 0; } void intMatrixAll(int […]
给定char的指针,可以执行以下操作: char *s = “data”; 据我所知,这里声明了一个指针变量,为变量和数据分配了内存,后者填充了data\0并且有问题的变量被设置为指向它的第一个字节(即变量包含一个可以解除引用的地址)。 那简短而紧凑。 例如,给定int的指针,可以这样做: int *i; *i = 42; 或者那个: int i = 42; foo(&i); // prefix every time to get a pointer bar(&i); baz(&i); 或者那个: int i = 42; int *p = &i; 这有点同义反复。 使用单个变量时,它很小且可以容忍。 但是,它并没有多次使用多个变量,从而导致代码混乱。 有什么办法可以简洁地写出同样的东西吗? 这些是什么? 有没有更广泛的编程方法,可以完全避免这个问题? 可能是我不应该使用指针(笑话)或其他什么?