Tag: string

从C中的文件中读取字符串

我有一个包含多个字符串的文件,每个字符串在一个单独的行上。 所有字符串都是32个字符长(所以33个末尾有’\ n’)。 我正在尝试阅读所有字符串。 现在,我只想阅读它们而不是按如下方式存储它们: char line[32]; while (!feof(fp)) { fgets(line, 32, fp); } printf(“%s”, line); 这打印出零。 为什么不工作? 此外,我试图在每个字符串读取的末尾存储一个空终止符。 我将line数组更改为长度为33但是如果找到’\n’ ,我将如何将其替换为\0并将其存储?

strcmp有什么问题?

在阅读字符串中的问题并将其与C进行比较的回答中 ,不止一个人不鼓励使用strcmp() ,说像 我也强烈建议你现在习惯使用strncmp(),以避免很多问题。 或( 为什么我的字符串比较失败? ) 确保你使用strncmp而不是strcmp。 strcmp非常不安全。 他们提到了什么问题? 强烈建议不要 使用带字符串说明符和gets() scanf() ,因为它们几乎不可避免地导致缓冲区溢出漏洞。 但是,使用strcmp()溢出缓冲区是不可能的,对吗? “缓冲区溢出或缓冲区溢出是一种exception现象,程序在将数据写入缓冲区时会超出缓冲区的边界并覆盖相邻的内存。” ( – 维基百科:缓冲区溢出 )。 由于strcmp()函数永远不会写入任何缓冲区,strcmp()函数不会导致缓冲区溢出,对吧? 人们不鼓励使用strcmp()的原因是什么,并推荐使用strncmp() ?

strstr()表示非null终止的字符串

如何在C中对已计数字符串(即非空终止)执行strstr() 的就地等效操作?

我如何完成K&R练习2-4?

我正在学习如何使用k&r书(C语言编程语言)在C语言中编写程序,我对其中一个练习有疑问。 它要求我检测并删除字符串s1中的字符,该字符匹配字符串s2中的任何字符。 所以,比如说s1 =“A”; 并且s2 =“AABAACAADAAE” 我希望它返回“BCDE” 我知道我正走在正确的道路上,我只是不知道如何很好地设计程序,你能不能给我任何额外的提示。 我试着阅读二进制搜索树算法,但觉得这个世俗的任务有点太先进了。 感谢大家! /* An alternate version of squeeze(s1, s2) that deletes each character in * s1 that matches any character in the string s2 * * Angie@odfx.org */ #include #include void squeeze(char s[], char t[]); char string[] = “BAD”; char sstring[] = “ABC”; int main(void) { squeeze(string, […]

是否有strstr的反向function

我试图找到一个类似于strstr函数,它搜索从字符串开头到字符串开头的子字符串。

C:为什么没有&for scanf()函数中的字符串?

可能重复: 为什么scanf不需要字符串的&符号,也适用于printf(在C中)? 在C中,当我们使用scanf()函数获取用户输入时,我们总是在变量前使用&符号。 例如: scanf(“%d”, &number); scanf(“%c”, &letter); 这可确保我们的输入存储在适当的地址中。 但是如果是字符串,我们不使用& 。 这是为什么?

C字符串,strlen和Valgrind

我试图理解为什么Valgrind正在吐痰: ==3409== Invalid read of size 8 ==3409== at 0x4EA3B92: __GI_strlen (strlen.S:31) 每当我在动态分配的字符串上应用strlen时? 这是一个简短的测试用例: #include #include #include int main() { char *hello = “Hello World”; char *hello2; /* Step 1 */ printf(“Step 1\n”); printf(“strlen : %lu\n”,(unsigned long)strlen(hello)); /* Step 2 */ hello2 = calloc(12,sizeof(char)); hello2[0] = ‘H’; hello2[1] = ‘e’; hello2[2] = ‘l’; hello2[3] = […]

strcat将char连接到字符串上?

使用GDB,我发现在尝试此操作时出现了分段错误: strcat(string,&currentChar); 鉴于该字符串被初始化为 char * string = “”; 和currentChar是 char currentChar = ‘B’; 为什么会导致分段错误? 如果strcat不能用于此,我怎么能将char连接到一个字符串?

由fgets回车

我正在运行以下代码: #include #include #include int main(){ FILE *fp; if((fp=fopen(“test.txt”,”r”))==NULL){ printf(“File can’t be read\n”); exit(1); } char str[50]; fgets(str,50,fp); printf(“%s”,str); return 0; } text.txt包含: I am a boy\r\n 由于我在Windows上,它需要\ r \ n作为一个新的行字符,所以如果我从一个文件中读取它,它应该在str存储”I am a boy\n\0″ ,但我得到”I am a boy\r\n” 。 我正在使用mingw编译器。

在两个字符串中查找常见字符

我正在编码我们需要计算两个字符串中常见字符数的问题。 计数的主要部分是这样的 for(i=0; i < strlen(s1); i++) { for(j = 0; j < strlen(s2); j++) { if(s1[i] == s2[j]) { count++; s2[j] = '*'; break; } } } 这与O(n ^ 2)逻辑一致。 但是,我想不出比这更好的解决方案。 任何人都可以用O(n)逻辑帮助我编码。