Tag: 指针

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

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

警告:C中指针和整数之间的比较

我收到警告 warning: comparison between pointer and integer 在包含if下一段代码的行上: char cwd[1024]; if (getcwd(cwd, sizeof(cwd)) != (char*)NULL) printf(“%s\n”,cwd); else error_print(“error in pwd”); 我需要修复的方式和内容?

strcpy()/ uninitialized char指针这个代码背后的诀窍是什么?

#include #include #include void main () { char *imsi; unsigned int i; int val; char *dest; imsi = “405750111”; strncpy(dest,imsi,5); printf(“%s”,dest); /* i = 10; */ } 在上面的代码中,如上所述对i = 10赋值进行了注释,代码工作正常,没有错误。 当包含赋值用于编译时,错误(分段错误)发生在strncpy(dest,imsi,5); 。 通过避免对变量i的优化(即, volatile int i; ),即使包括赋值( i = 10 ),也清除错误。

返回局部变量行为的地址

可能重复: 可以在其范围之外访问局部变量的内存吗? 输入: #include #include int func2(void); int* func1(void); int func2(void) { int* b; b = func1(); printf(“%d”, *b); printf(“%d”, *b); printf(“%d”, *b); } int* func1() { int a = 13; return &a; } int main() { func2(); } 输出: 13 -1077824828 -1077824828 有人可以解释堆栈和操作系统中发生的事情吗? 获取指针值后,为什么结果从13变为垃圾?

更改为指针算术

我是C的新手,我在弄清楚如何使用它们时遇到了很多麻烦。 我有一段代码,在void函数中有一些指针算术: void function(int n, int *a, int *b){ int *p,*q; q = b; int i; *b = 0; for (i = 1; i<n; i++) if(*(a+i) == *(a+i-1)) *(b+i)=0; else *(b+i)=1; } 我试图完全改变它只使用没有循环索引变量的指针算法。 到目前为止我已经得到了这个: void function(int n, int *a, int *b){ int *p,*q; q = b; *b = 0; for (p = a+1; p<a+n; p++) […]

从pop函数返回错误的地址

解决了我的结构的其他问题后,我的推送按预期工作,但是我的pop返回错误的地址,我不知道为什么 – QNode* const Q_Pop(Q* const pointerQ){ … // empty check QNode* tempNode = pointerQ->front.next; pointerQ->front.next = (tempNode->next); tempNode->next->prev = &(pointerQ->front); return tempNode; } 我相当确定我的实际删除和重新链接堆栈的逻辑是正确的但我使用指针并返回它们是混乱的。 结构 – struct QueueNode { struct QueueNode *prev; /* Previous list element. */ struct QueueNode *next; /* Next list element. */ }; typedef struct QueueNode QNode; struct Queue { QNode […]

取消引用指向不完整类型的指针

我从这段代码中得到以下错误,我是C的新手并且随着我的学习而学习! cc -g -I /usr/lib/i386-linux-gnu -c anld.c anld.c: In function ‘main’: anld.c:379:11: error: dereferencing pointer to incomplete type 主.C文件 bridge_t *bridge_p = bridge_new(); //Create / init our bridge bridge_p->s = server_connect(options.server_p, options.dest_port, options.ifname_p, options.gateway_p); bridge .C文件 struct bridge { int s; }; bridge_t *bridge_new(void) { bridge_t *bridge_p; bridge_p = OPENSSL_malloc(sizeof *bridge_p); if (!bridge_p) { return […]

在C中的函数中将结构指针设置为NULL

我尝试使用函数释放结构指针,然后检查NULL。 它不起作用! typedef struct{ int * num; } D; void freeD(D * a){ free(a->num); free(a); a=NULL; } int main(){ D * smth = malloc(sizeof(D)); smth->num = malloc(sizeof(int)*2); freeD(smth); if(smth==NULL){ printf(“It’s NULL”); } }

c 中int(* pt)的含义是什么

我已经阅读了关于此类型声明的一些内容。 声明是: int (*arr)[5]; 我对这种类型的声明有点困惑。实际上这个声明是什么意思,我们什么时候使用它。

* C中的Vs ++优先级

我无法理解以下C代码的输出: #include main() { char * something = “something”; printf(“%c”, *something++); // s printf(“%c”, *something); // o printf(“%c”, *++something); // m printf(“%c”, *something++); // m } 请帮忙 :)