Tag: char

C Char指针

让我们说我们有一系列指针: char *ptr[30]; 现在这个工作正常,似乎没有做任何意想不到的事情! 我可以轻松输入名字。 scanf(“%s”, ptr[1]); scanf(“%s”, ptr[2]); scanf(“%s”, ptr[3]); printf(“%s\n”, ptr[1]); printf(“%s\n”, ptr[2]); printf(“%s\n”, ptr[3]); 我的问题是,如果一个指针可以用这种方式来存储名称的结尾数,那么为什么要使用malloc呢? 在这种情况下,ptr [1]不指向输入中的字符,而是指向新输入本身。 例如,如果ptr有mukul,ptr [1]应该指向’u’,如果在指定这样的指针时没有分配空间,那么限制是多少?

为什么sizeof(char + char)返回4?

char a, b; printf(“%d”, sizeof(a+b)); printf写入屏幕的内容是什么? 我认为因为sizeof(char)= 1,sizeof(a + b)也将是1,但结果是4.我不明白这一点,如果我们添加两个字符,为什么写4?

使用strcmp比较char数组中的字符

我想使用strcmp在char数组中查找特定字符。 例如,我想检测索引号在哪里. 在文中。 char host[100] = “hello.world”; size_t i=0; for(i=0;i<strlen(host);i++){ if(strcmp(host[strlen(host)-i], ".")){ printf("%d\n",i); } } 但是,它输出”passing argument 1 of ‘strcmp’ makes pointer from integer without a cast ” 。 我注意到char数组是一个int,但我无法弄清楚我应该如何传递char索引。 你能告诉我应该如何使用这个function吗?

任何将’char’作为’unsigned’的编译器?

除非用户在文件或项目设置中明确提到,否则是否有任何C编译器将默认类型的char作为unsigned? / Kanu_

将字符串从指针复制到字符串

我正在开发一些代码,它从SD卡中读取文件名(使用FatF)并将它们显示在屏幕上。 这是我工作的内容,它按预期打印出卡上的文件 – FRESULT result; char *path = ‘/’; //look in root of sd card result = f_opendir(&directory, path); //open directory if(result==FR_OK){ for(;;){ result = f_readdir(&directory, &fileInfo); //read directory if(result==FR_OK){ if(fileInfo.fname[0]==0){ //end of dir reached //LCD_UsrLog(“End of directory.\n”); break; } if(fileInfo.fname[0]==’.’)continue; //ignore ‘.’ files TCHAR *fn_ptr; //file name, why a pointer? fn_ptr=&fileInfo.fname; //get file name […]

为什么在char变量中存储255会在C中给出它的值-1?

我正在读一本C书,作者提到了一篇文章: “ if ch (a char variable) is a signed type, then storing 255 in the ch variable gives it the value -1 ”。 任何人都可以详细说明吗?

C正则表达式:提取实际匹配

我在C中使用正则表达式(使用“regex.h”库)。 在为regcomp(…)和regexec(…)设置标准调用(和检查)之后,我只能设法打印与我编译的正则表达式匹配的实际子字符串。 根据手册页,使用regexec意味着将子串匹配存储在称为“regmatch_t”的结构中。 结构只包含rm_so和rm_eo来引用我所理解的内存中匹配子字符串的字符地址,但我的问题是如何使用这些来抵消和两个指针来提取实际的子字符串并将其存储到一个数组(理想情况下是一个2D字符串数组)? 它只在您打印到标准输出时有效,但每当您尝试使用相同的设置但将其存储在字符串/字符数组中时,它会存储最初用于匹配表达式的整个字符串。 此外,打印声明中的“%。* s”是什么? 我想这是正确读取字符数组指针的正则表达式。 我只想将匹配的子串存储在一个集合中,这样我就可以在我的软件中的其他地方使用它们了。 背景:p和p2都指向设置为指向字符串开头的指针,然后在下面的代码中输入while循环:[编辑:“匹配”是一个2D数组,意味着最终存储子字符串匹配并被预先分配/初始化在主循环之前,你看到下面] int ind = 0; while(1){ regExErr1 = regexec(&r, p, 10, m, 0); //printf(“Did match regular expr, value %i\n”, regExErr1); if( regExErr1 != 0 ){ fprintf(stderr, “No more matches with the inherent regular expression!\n”); break; } printf(“What was found was: “); int i = 0; while(1){ […]

为什么C和C ++非常讨厌签名char?

为什么C允许使用“字符类型”访问对象: 6.5表达式 (C) 对象的存储值只能由具有以下类型之一的左值表达式访问: 一个字符类型。 但C ++只允许char和unsigned char ? 3.10左值和右值 (C ++) 如果程序试图通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义: char或unsigned char类型。 签名char仇恨的另一部分(引自C ++标准): 3.9类型 (C ++) 对于普通可复制类型T的任何对象(基类子对象除外),无论对象是否保持类型T的有效值,组成对象的基础字节都可以复制到char或unsigned char数组中。 如果将char或unsigned char数组的内容复制回对象,则该对象应随后保持其原始值。 并从C标准: 6.2.6类型表示 (C) 存储在任何其他对象类型的非位字段对象中的值由n×CHAR_BIT位组成,其中n是该类型对象的大小(以字节为单位)。 可以将该值复制到unsigned char [n]类型的对象中(例如,通过memcpy); 生成的字节集称为值的对象表示。 我可以在stackoverflow上看到很多人说这是因为unsigned char是唯一保证没有填充位的字符类型,但是C99第6.2.6.2节整数类型说 signed char不应有任何填充位 那么这背后的真正原因是什么?

如何将3D数组的字符传递给函数

我有一个chars table [] [] []的3D数组,我想将它传递给void函数,以便它可以对它进行更改。 我怎样才能做到这一点? void make(char minor[][][]); ….. char greater[20][30][50]; make(greater); 我猜这不会奏效。 编辑:与此相关的另一个问题:假设我想创建一个复制函数将字符串复制到数组中 – 我应该如何调用函数中的strcpy? void copy(char (*minor)[][]) { char m[50] = “asdasdasd”; strcpy(minor[][],m); }

将double值转换为C中的char数组

如何在C中将double值转换为char数组? double a=2.132; char arr[8]; 有没有办法在标准C中这样做? 谁能提供任何解决方案?