Tag: 文字

ISO C和签名的文字常量

我刚刚开始阅读ISO C 2011标准,以及它的最后公开草案[1] ,并意识到在C词汇语法[1] [458ff。]中所有(字面)数字常数都是无符号的。 这是否意味着编译器将带符号的数值常量(如-5.1E10或-1)解释为相应的一元运算符的调用? 例如-1 – (1),+ 512 +(512) 更新:我的错,“所有(文字)数字常数都是无符号的”我的意思是“所有(文字)数值常数都是非负的” 请注意,托马斯

如果两个指针的地址相同,则改变其中一个指针的值

我有一个问题,我看到两个指针的地址在这里是相同的( 两个指针的地址是相同的 ),也由蓝色月亮回答。 这让我更加怀疑。 由于两个指针都有相同的地址,我想改变其中一个指针的值,期望值也会在其他指针中改变(因为它们具有相同的地址)。 但它给出了分段错误。 我在下面的代码中显示它。 #include #include int main() { char * p = “abc”; char * p1 = “abc”; printf(“%d\n %d\n”, (void *)p, (void *)p1); printf(“%s\n %s\n”, p, p1); *p = ‘b’; printf(“%d\n %d\n”, p, p1); printf(“%s\n %s\n”, p, p1); }

这是合法的C / C ++吗? `int * p =(int ){1,2,3};`

我的这个答案产生了一些评论声称以下构造不是合法的C / C ++: void f (int* a) ; f ((int[]){1,2,3,4,0}) ; (请参阅此完整程序的ideone链接 )。 但我们无法解决问题。 任何人都可以对此有所了解吗? 各种标准有什么用?

是否有可能有一个指针文字?

在C中,可以使用forms的字符串文字 char *string = “string here”; 整数文字: uint8_t num = 5; 长文字: long long bigNum = 90322L; 浮点文字: float decimal = 6.3f; 是一种有指针文字的方法吗? 这是内存空间的文字地址。 我正在做一些嵌入式项目的工作,需要硬编码DMA访问的值。 我正在做类似以下的事情: uint32_t *source = 0x08000000; 虽然这编译并正常工作,但我得到以下编译器错误(我正在使用GCC的变体): cc0144: {D} warning: a value of type “int” cannot be used to initialize an entity of type “uint32_t *” cc0152: {D} warning: conversion of […]

确定字符串文字的长度

给定一个指向字符串文字的指针数组: char *textMessages[] = { “Small text message”, “Slightly larger text message”, “A really large text message that ” “is spread over multiple lines” } 如何确定特定字符串文字的长度 – 比如第三个? 我尝试使用sizeof命令如下: int size = sizeof(textMessages[2]); 但结果似乎是数组中指针的数量,而不是字符串文字的长度。

读取包含float的C中的.txt文本文件,用空格分隔

它看起来很常见而且很明显,但我已经在过去读过C中的txt文件了,而且我真的被卡住了。 我有这种格式的txt文件 0.00000587898458 0.0014451541000 0.000000000001245 0.00012454712235 0.1245465756945 0.012454712115140 …有640列和480行。 我想把我的txt文件的每个数字放在一个浮点数中,尽可能保持最大精度,并在for循环中。 FILE* myfile=NULL; double myvariable=0.0; myfile=fopen(“myfile.txt”,”r”); for(i =0, k=0 ; i< height; i++) for (j=0 ; j< width ; j++){ fscanf(myfile,"%0.20f",&myvariable); printf("%0.20f",myvariable); k++; } } fclose(myfile); 非常感谢您的帮助

使用C am我认为以多个零开头的文字被认为是八进制的吗?

在下面的C代码中是用于所有这些定义的八进制文字? 即使他们从多个零开始? #define TCL_REG_BASIC 000000 /* BREs (convenience). */ #define TCL_REG_EXTENDED 000001 /* EREs. */ #define TCL_REG_ADVF 000002 /* Advanced features in EREs. */ #define TCL_REG_ADVANCED 000003 /* AREs (which are also EREs). */ #define TCL_REG_QUOTE 000004 /* No special characters, none. */ #define TCL_REG_NOCASE 000010 /* Ignore case. */ #define TCL_REG_NOSUB 000020 /* Don’t […]

使用C预处理器为scanf构造字符串文字?

我正在尝试创建一个sscanf字符串文字,以帮助在C99中防止缓冲区溢出。 目标是这样的: #define MAX_ARG_LEN 16 char arg[MAX_ARG_LEN] = “”; if (sscanf(arg, “%”(MAX_ARG_LEN-1)”X”, &input) > 0) 显而易见的“手动”解决方案如下: #define MAX_ARG_LEN 16 #define MAX_ARG_CHARS “15” char arg[MAX_ARG_LEN] = “”; if (sscanf(arg, “%”MAX_ARG_CHARS”X”, &input) > 0) 但是,在缓冲区大小为16的情况下,我更喜欢自动生成“%15X”。此链接几乎适用于我的应用程序: 将预处理程序标记转换为字符串但不处理-1。 建议?

为什么C不具有二进制文字?

我经常希望我能在c中做这样的事情: val1 &= 0b00001111; //clear high nibble val2 |= 0b01000000; //set bit 7 val3 &= ~0b00010000; //clear bit 5 拥有这种语法似乎是C的一个非常有用的补充,没有我能想到的缺点,对于低级语言而言,这似乎是很自然的事情。 编辑:我看到了其他一些很好的选择,但是当有更复杂的面具时,它们都会崩溃。 例如,如果reg是控制微控制器上I / O引脚的寄存器,并且我想将引脚2,3和7设置为高电平,同时我可以写入reg = 0x46; 但是我不得不花10秒时间思考它(而且每次我在没有看一两天后阅读这些代码时我可能不得不再花10秒钟)或者我可以写reg = (1 << 1) | (1 << 2) | (1 << 6); reg = (1 << 1) | (1 << 2) | (1 << 6); 但我个人认为这不仅仅是写’reg = 0b01000110;’。 […]

字符串文字是否计为部分初始化程序并进行零初始化?

在C中,您可以部分初始化结构或数组,结果是初始化程序中未提及的成员/元素是零初始化的。 (C99第6.7.8.19节)。 例如:- int a[4] = {1, 2}; // a[0] == 1 // a[1] == 2 // a[2] == 0 // a[3] == 0 您还可以使用字符串文字(C99第6.7.8.14节)和“连续字符…初始化数组元素”来初始化“字符类型数组”。 例如:- char b[4] = “abc”; // b[0] == ‘a’ // b[1] == ‘b’ // b[2] == ‘c’ // b[3] == ‘\0’ 一切都很简单。 但是如果明确给出数组的长度会发生什么,但是使用太短而无法填充数组的文字? 剩余的字符是否已初始化,或者它们是否具有未定义的值? char c[4] = “a”; // c[0] […]