Tag: string

用于在C中连接两个字符串的宏

我正在尝试定义一个宏,假设它采用2个字符串值并返回它们之间的一个空格连接。 似乎我可以使用除了空格之外我想要的任何角色,例如: #define conc(str1,str2) #str1 ## #str2 #define space_conc(str1,str2) conc(str1,-) ## #str2 space_conc(idan,oop); space_conc将返回“idan-oop” 我想要一些东西回归“idan oop”,建议?

什么是C语言中的“宽字符串”?

我在书中遇到过这个: wscanf(L”%lf”, &variable); 其中第一个参数的类型为wchar_t * 。 这与scanf(“%lf”, &variable); 其中第一个参数是char *类型。 那有什么不同呢? 我之前从未听过“宽字符串”。 我听过一些名为Raw String Literals的东西,它正在打印字符串(不需要像转义序列那样的东西),但那不是在C.

strcmp()在C中完全返回什么?

我在C中写了这段代码: #include #include #include #include int main() { char string1[20]; char string2[20]; strcpy(string1, “Heloooo”); strcpy(string2, “Helloo”); printf(“%d”, strcmp(string1, string2)); return(0); } 控制台打印值是1还是o值和\0字符的ASCII值之间的差值,即111? 在这个网站上写道,这应该给出111,但当我在我的笔记本电脑上运行时,它显示1.为什么?

strtok给出分段错误

为什么下面的代码给出了Seg。 最后一行出错? char* m=ReadName(); printf(“\nRead String %s\n”,m); // Writes OK char* token; token=strtok(m,’-‘); 如上所述,读取字符串打印没有问题,但为什么不能拆分为令牌?

如何将char *转换为BSTR?

如何将char *从C dll传递给VB 这是示例代码: void Cfunc(char *buffer,int len) { BSTR buf_bstr = SysAllocString((BSTR)buffer); VBptr.VBfunc(buf_bstr,len); } 此function不起作用,实际上其他一些值被发送到VB而不是实际值。 有人可以建议一个解决方案?

什么时候我应该使用带有scanf(&)的&符号

使用scanf()在c中使用&符有什么规则? struct Student { char name[20]; int id; }; void main() { struct Student std1; printf(“enter name and id of std1\n”); scanf(“%s %d”, std1.name, &(std1.id)); } 为什么对于String我不需要使用&符号和int我必须使用它? 是否有关于何时使用&符号的规则?

为什么char *会导致未定义的行为而char 不会?

尝试修改字符串文字会导致未定义的行为: char * p = “wikipedia”; p[0] = ‘W’; // undefined behaviour 防止这种情况的一种方法是将其定义为数组而不是指针: char p[] = “wikipedia”; p[0] = ‘W’; // ok 为什么char*会导致未定义的行为,而char[]却没有?

C – 为什么strcpy()是必需的

有人可以向我解释为什么strcpy()是必须将字符串分配给字符数组,例如在下面的代码片段中。 int main(void) { char s[4]; s = “abc”; //Fails strcpy(s, “abc”); //Succeeds return 0; } s = “abc”失败的原因是什么? 为什么strcpy()是在声明字符串之后将字符串赋值给char数组的唯一方法? 我似乎很奇怪你必须使用一个函数来执行一个基本的赋值。

字符串文字的C优化

刚刚在gdb中检查以下内容: char *a[] = {“one”,”two”,”three”,”four”}; char *b[] = {“one”,”two”,”three”,”four”}; char *c[] = {“two”,”three”,”four”,”five”}; char *d[] = {“one”,”three”,”four”,”six”}; 我得到以下内容: (gdb) pa $17 = {0x80961a4 “one”, 0x80961a8 “two”, 0x80961ac “three”, 0x80961b2 “four”} (gdb) pb $18 = {0x80961a4 “one”, 0x80961a8 “two”, 0x80961ac “three”, 0x80961b2 “four”} (gdb) pc $19 = {0x80961a8 “two”, 0x80961ac “three”, 0x80961b2 “four”, 0x80961b7 “five”} (gdb) […]

从char **隐式转换为const char **

为什么我的编译器(GCC)没有从char**隐式转换为const char** ? 以下代码: #include void print(const char** thing) { std::cout << thing[0] << std::endl; } int main(int argc, char** argv) { print(argv); } 给出以下错误: oi.cpp: In function ‘int main(int, char**)’: oi.cpp:8:12: error: invalid conversion from ‘char**’ to ‘const char**’ [-fpermissive] oi.cpp:3:6: error: initializing argument 1 of ‘void print(const char**)’ [-fpermissive]