Tag: 字符串

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

在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] […]

字符数组后的奇怪字符

我是C的真正初学者,但我正在学习! 我之前偶然发现了这个问题,并决定询问原因是什么。 请解释一下你的答案,这样我才能学习。 我制作了一个程序,允许您输入5个字符,然后显示您编写的字符并还原它们,例如:“asdfg” – “gfdsa”。 奇怪的是,在输入的原始字符后显示一个奇怪的字符。 这是代码: char str[5]; char outcome[] = “OOOOO”; int i; int u; printf(“Enter five characters\n”); scanf(“%s”, str); for(i = 4, u = 0; i >=0; u++, i–){ outcome[i] = str[u]; } printf(“\nYou wrote: %s. The outcome is: %s.”, str , outcome); return 0; 如果我输入:“asdfg”它显示:“asdfg♣”,为什么? 谢谢你的时间,请解释你的答案:)

如何(un)转义C / C ++中的字符串?

给定一个计数字符串(一个字符数组,或者像std::string这样的包装器),是否存在一种“正确”的方法来转义和/或在C或C ++中取消它,这样“特殊”字符(如null)角色)成为C风格的逃脱和“正常”的角色保持原样? 或者我必须手动完成?

比较C中的两个字符串?

由于未进行比较,此代码无效。 为什么? 所有名字都超过了if 。 printf(“Enter Product: \n”); scanf(“%s”, &nameIt2); printf(“Enter Description: \n”); scanf(“%s”, &descriptionI); printf(“Enter Quantity: \n”); scanf(“%d”, &qtyI); printf(“Enter Order Quantity: \n”); scanf(“%s”, &ordqtyI); while (fscanf(fp4, “%s %s %d %s\n”, &namet2, &description2, &qty2, &ordqty2) != EOF){ if(namet2 != nameIt2) fprintf(fpt2, “%s %s %d %s\n”, &namet2, &description2, qty2, &ordqty2); }

在C中使用strcat

好的,所以我有下面的代码在C#中将一个字符串附加到另一个,注意这只是一个例子 ,所以在C#中给出替代字符串连接方法并不是必须的,这只是为了简化示例。 string Data = “”; Data +=”\n\nHTTP/1.1 ” + Status_code; Data += “\nContent-Type: ” + Content_Type; Data += “\nServer: PT06”; Data += “\nContent-Length: ” + Content_Lengt; Data += “\nDate: ” + Date; Data += “\n” + HTML; 现在我想在C中做同样的事情,我试图通过以下方式做到这一点 time_t rawtime; time ( &rawtime ); char *message = “\n\nHTTP/1.1 “; message = strcat(message, Status_code); message […]

读取C中的可变长度字符串用户输入

我试图读取可变长度的用户输入并执行一些操作(比如在字符串中搜索子字符串)。 问题是我不知道我的字符串有多大(文本很可能是3000-4000个字符)。 我附上了我尝试的示例代码和输出: char t[],p[]; int main(int argc, char** argv) { fflush(stdin); printf(” enter a string\n”); scanf(“%s”,t); printf(” enter a pattern\n”); scanf(“%s”,p); int m=strlen(t); int n =strlen(p); printf(” text is %s %d pattrn is %s %d \n”,t,m,p,n); return (EXIT_SUCCESS); } 输出是: enter a string bhavya enter a pattern av text is bav 3 pattrn is […]

char * str =“…”和char str =“……”之间的区别?

可能重复: C中的char s []和char * s有什么区别? 关于C中指针和字符串的问题 我正在读C中的字符串,我很困惑。 我可以用两种方式“声明”字符串: char *str = “This is string”; char str2[20] = “This is string”; 这两个声明有什么区别? char str2[20]何时优先于char *str ?

C正则表达式如何匹配以“或任何空字符串结尾的任何字符串?

我正在尝试生成代码以逐行读取逗号分隔文本文件中的输入。 我只对3个领域感兴趣,所以我正在跳过剩下的。 问题是2个字段是包含在引号中的字符串,其中一个实际上是可选的。 例如,两个连续的行可能如下所示: 0,,10004,10004,”Albany Hwy After Galliers Av”,””,-32.13649428,116.0176090070,3 0,,10005,10005,”Albany Hwy Armadale Kelmscott Hospital”,”Armadale Kelmscott Hospital”,-32.13481555555560,116.017707222222,3 由于我对字符串不感兴趣(我只对一些数字感兴趣),我只是在scanf中使用*运算符跳过它们。 对于第一个字符串,它很容易,因为这是一个必填字段,所以我可以跳过第一个双引号匹配到一切的正则表达式,直到第二个双引号,如下所示: \”%*[^\”] 我遇到麻烦的是第二个领域,就在第一个领域之后。 问题是这个字段是可选的; 因此它可能有文本,也可能没有。 只要不是这样,上面列出的正则表达式就无法正常工作,整个scanf操作都会失败。 尽管我付出了最大的努力,但我无法生成一个正则表达式,它可以成功匹配第二个双引号之外的所有内容,以及匹配空字符串。 有谁知道如何修改我的正则表达式来执行这样的function? ps这里是我的scanf操作的示例: res = sscanf(buf, “%*d,,%ld,%*ld,\”%*[^\”]\”,\”%*[]\”,%lf,%lf,%*d”, &cursid, &curslat, &curslong);

C字符串的默认编码是什么?

我知道C字符串是char [],在最后一个元素中带有’\ 0’。 但是这些字符是如何编码的? 更新:我发现这个很酷的链接谈论了许多其他编程语言及其编码约定: 链接

在C中,为什么我不能在声明后将字符串赋值给char数组?

这一直困扰着我。 struct person { char name[15]; int age; }; struct person me; me.name = “nikol”; 当我编译时,我收到此错误: 错误:从类型’char *’分配类型’char [15]’时出现不兼容的类型 我错过了一些明显的东西吗?