2、字符串的连接不必使用##这么麻烦,实际中两个字符串常量可以直接写到一起,如printf("ab""cd")输出abcd。 或在使用##宏定义时,可以用printf(ToString(str) "\n");输出字符串后换行,以前不敢这样用,后来试验了下发现还比较好使,当然直接用puts也可完成同样功能。 3、若要使#或##转换的是宏字符常量的值...
//与下一个程序对比,在这里str不是以指针的形式出现,而是具体的字符串数组 char str[3][10],ptr[3][10]={"mayongen1","mayongen2","mayongen3"}; memcpy(str,ptr,8*sizeof(sizeof(char *))); //从ptr中,拷贝8*sizeof(char *)(即8*4=32字节)大小的空间容量信息,到str内 //用内存拷贝函数将...
strlen函数返回值是一个size_t(无符号整数),参数为一个字符串的指针,加上const就是为了不改变传过来数组的内容。 #include<assert.h>#include<stdio.h>int my_strlen(const char* str){assert(str !=NULL)int count = 0;while (*str){str++;count++;}return count;}int main(void){char arr[] = "h...
这个实例演示了token##n会连接到token34中,在这里,我们使用了字符串常量化运算符(#)和标记粘贴运算符(##)。 ④defined()运算符 预处理器defined()运算符是用在常量表达式中的,用来确定一个标识符是否已经使用#define定义过。如果指定的标识符已定义,则值为真(非零)。如果指定的标识符未定义,则值为假(零)。
2.字符串常量化运算符(#)在宏定义中,当需要把一个宏的参数转换为字符串常量时,则使用字符串常量化运算符(#)。在宏中使用的该运算符有一个特定的参数或参数列表。3.标记粘贴运算符(##)宏定义内的标记粘贴运算符(##)会合并两个参数。它允许在宏定义中两个独立的标记被合并为一个标记。4.defined(...
如果你输入一个前后带几个空格的字符串,比如“ 123 ”,你会发现s忽略了前面的空格,读入了非空格字符(123),然后停在了后面的第一个空格,并把这个空格放回输入流了。所以,第二行就会立即执行,读入一个空格然后输出。这是个很有可能的原因...不过更详细的错误可能需要你提供多一点的信息,比如输入样例和报错...
2、字符串的连接不必使用##这么麻烦,实际中两个字符串常量可以直接写到一起,如printf("ab""cd")输出abcd。或在使 用##宏定义时,可以用printf(ToString(str) "\n");输出字符串后换行,以前不敢这样用,后来试验了下发现还比较好使,当然直接用puts也可完成同样功能。
C语言模拟泛型-粘贴符##的使用 迁移 因为百度空间没有了,所及将以前写的一篇关于C语言粘贴符的使用的随笔迁移至此。 最近在百度知道看到有关C语言泛型的问题因为举例比较长,在这里作为回答,并作为C语言知识的记录,如果有不同意见,欢迎大家互相探讨,其实我的模拟泛型的思路就是使用粘贴符##以及宏定义完成。下面举例...
更新:应该是scanf的问题。scanf在读取一个字符串之后再读取数字,有时就会出现问题。你可以试试这几句话:char s[20];scanf("%s",s);printf("string:%s:stringend\n",s);char c = getchar();printf("char:%c:charend\n",c);如果你输入一个前后带几个空格的字符串,比如“ 123 ...
//读取第一个字符 putchar( c ); } 输出: Enter a value :abcdef You entered: a gets() & puts() 函数 char *gets(char *s)函数从stdin读取一行到s所指向的缓冲区,直到一个终止符或 EOF。 int puts(const char *s)函数把字符串 s 和一个尾随的换行符写入到stdout。