我有一个看起来像这样的程序: EVP_PKEY *generate_RSA_key_and_uuid(unsigned char uuid[16]) { EVP_PKEY *key_p; key_p = EVP_PKEY_new(); return key_p; } int build_and_save_csr(int dn_entries, X509_REQ *req_p, EVP_PKEY *priv_key_p, char *passphrase) { priv_key_p = generate_RSA_key_and_uuid(uuid); } int makecsr(X509_REQ *req_p, EVP_PKEY *priv_key_p, char *passphrase) { if (build_and_save_csr(2, req_p, priv_key_p, passphrase) != 0) { fprintf(stderr, “Could not create csr file / private key…\n”); exit(1); } […]
我正在创建一个添加和减去2个数字的程序。 然后我必须将这个答案输出到不同的基础。 我的答案是十进制格式,类型为long double,例如: long double answer; answer = numberOne + numberTwo; 我想将这个答案转换成二进制。 现在我在我的程序中使用的代码执行此操作,但使用char指针: char * decimalBinary (char * decimalNumber) { bool zeroFront = true; int i; int z; int j = 0; int n = atoi(decimalNumber); char * binaryNum = malloc(32+1); binaryNum[32] = ‘\0’; int current_index=1; int end_index = strlen(decimalNumber)-1; //Error check for valid […]
在阅读这个SO问题的答案时,我了解到越界指针算法是未定义的。 的确,根据C99 6.5.6第8段 如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出; 否则,行为未定义。 释放该对象会使该保证无效吗? 7.20.3.2“自由function”似乎没有提到它,只是提到“空间被解除分配”。 由于6.5.6特别提到溢出,它似乎是一个整数溢出问题,free不会影响。 指向对象的指针的算术是“引用它”的行为吗? 换句话说,是: char *foo = malloc(10); free(foo); foo++; 未定义? 或者“溢出”的用法是不同的?
我有一个像这样的数组: typedef struct INSTR { char* str; int argc; } INSTR; const static INSTR instructions[] = { {“blue”,1}, {“green”,2} }; 然后我试着做一个bsearch ,但我收到了Segmentation fault信息: int comp(const void *a, const void *b) { const INSTR *aa = (INSTR*)a; const INSTR *bb = (INSTR*)b; // if I “return 0;” here i get no error. return strcmp(aa->str, bb->str); } […]
当我想通过函数初始化指向数组的指针时,我正在执行以下操作: 通过函数初始化和销毁数组: int initArr(int **b) { int *arr = (int *) malloc(sizeof(int)*2); if(arr == NULL) return 0; *b = arr; arr = NULL; return 1; } void destroyArr(int *b) { free(b); b = NULL; } 初始化指向数组的指针: int *pArr; int initStatus = initArr(&pArr); if(initStatus == 0) { printf(“%s”, “error”); return 0; } 使用指向数组的指针: *pArr = 1; […]
这段代码给了我一个分段错误: char *s1 = “String 1”, *s2 = “String 2”; void swap(char **, char **); int main(void) { swap(&s1, &s2); return 0; } void swap(char **p, char **q) { char **tmp; *tmp = *p; *p = *q; *q = *tmp; } 但是,如果我将最后一个函数的主体更改为此代码,它不会产生任何问题: char *tmp; tmp = *p; *p = *q; *q = tmp; 我真的不明白为什么我的第一个代码出现了分段错误。 提前致谢。
如果a是一个int数组, (char*) &a[1] – (char *)&a[0]等于4,而&a[1] – &a[0]等于1.为什么会这样?
在C中,我必须将数组传递给单个变量中的函数,并且在程序运行之前不知道数组的大小。 纸上解决方案是在数组中有一个额外的元素,你将存储数组的大小(我认为这称为“哨兵值”)。 好的,但我在实现这个问题时遇到了问题。 将array []作为函数参数传递似乎不起作用。 我想我可以发送指向第一个元素的指针,但是如何访问数组的其余部分呢?
我有一个通过TCP / IP连接与嵌入式板通信的PC程序(Infineon XE169(C166系列))。 该PC程序请求在某个地址上存储哪些数据。 PC程序是uC / Probe,我无法改变该程序的工作方式。 例如,uC / Probe发送以下消息: ____________________________________________________________________________________________________________ | Prefix | Length |Pkt_nr|Unused| Format | read size | Address to read |Unused|Postfix| |——————–|———–|——|——|———–|———–|———————-|——|——-| |0x75 0x43 0x50 0x72 | 0x00 0x08 | 0x00 | 0x00 | 0x02 0x00 | 0x04 0x00 | 0xDC 0x3E 0x61 0x00 | 0x00 | 0x2F | |u […]
我的CS教授给了我们这个任务。 基本上我们有两个未初始化的全局指针*min_ptr, *max_ptr 。 我们正在写这个void spray_paint( char *x, int sz, char tok, char *t )函数,该函数获取tok的值并放入从x到x+sz-1开始的内存中的某个位置。 char *t只是用于调试目的的随机事物。 *min_ptr, *max_ptr用于跟踪我们打印的内容的范围。 但是,我在初始化前两个指针时遇到了麻烦。 起初,我试图检查它们是否被初始化为NULL,但是我意识到它们在C99之后默认只被初始化为NULL,而我的教授说如果没有指定它们就不能假设它们被初始化为NULL,并且我们只能访问void spray_paint( char *x, int sz, char tok, char *t ) ,而不是代码中的任何其他地方。 无论如何都要检查两个全局指针是否已初始化? 或者,无论如何在第一次调用子程序时初始化它们,并且永远不再执行它? char *min_ptr, *max_ptr; void spray_paint( char *x, int sz, char tok, char *t ) { char *marker = x + 3; […]