c-strings 相关问题

编程语言C中的字符串表示为字符序列,后跟空终止符(表示为\ 0)。

C - 将字符串拆分为字符串数组

我不完全确定如何在 C 中执行此操作: char* curToken = strtok(字符串, ";"); //curToken = "ls -l" 我们会说 //我需要一个包含“ls”、“-l”和 NULL 的字符串数组用于 execvp() 怎么...

回答 2 投票 0

在 std::string 上使用 strtol

我最近从 C 迁移到 C++,对字符串有一些困惑。字符串不再是以前的样子了,不仅仅是带有终止符 ' ' 的 char 数组。 我没有...

回答 6 投票 0

C 中的 join() 或 implode()

我喜欢 Python 和 PHP 的一件事是能够轻松地从数组创建字符串: Python: ', '.join(['a', 'b', 'c']) PHP: 内爆(', ', array('a', 'b', 'c')); 不过,我想知道是否...

回答 3 投票 0

c++ 手动串联 C 字符串函数,调用两次并添加一个空格

我有一个作业要编写一个函数,该函数采用两个 C 字符串参数并将第二个参数附加到第一个参数,就像 strcat 函数一样,但不使用所述函数。然后,写一个主要的驱动...

回答 1 投票 0

std::string 的 strlen(str.c_str()) 和 str.length() 之间的区别

作为一种隐含的理解,我一直认为 std::string 的每个实现都必须满足每个字符串 str 的 strlen(str.c_str()) == str.length() 。 C++ 标准是什么...

回答 3 投票 0

在第二次调用 strtok() 期间,代码引发以下错误:大小 1 的读取无效

我是 C++ 新手,我不明白为什么代码不继续标记文本数组,而是引发错误。 我怀疑问题可能是因为传递了令牌 ptr ...

回答 1 投票 0

是否可以仅打印出 C 字符串的特定部分,而不创建单独的子字符串?

假设我有以下内容: char *string = "你好,你好吗?"; 是否可以仅打印该字符串的最后 5 个字节?仅前 5 个字节怎么样?有没有什么变化...

回答 4 投票 0

为什么我的递归 strlen 函数返回值大 4 倍?

我正在尝试用 C 语言递归实现 strlen 函数,由于某种原因,它返回的值是预期的 4 倍。 int *strlen(字符*s) { if(*s == ' ') 返回0; 电子...

回答 2 投票 0

在不使用任何预定义函数的情况下删除C中字符串中的多余空格

我想在不使用任何预定义函数的情况下删除 C 中字符串中的多余空格。 这是我的代码: 但在 XYZ 之后仍会打印一个额外的空格。 有没有更好的方法请分享 #inc...

回答 4 投票 0

为什么 fgets() 需要用户输入的最大大小?是不是因为它没有scanf()的“限制到第一个空格”属性?

这是fgets()的官方原型: char *fgets(char *str, int n, FILE *stream); 为什么要指定尺寸?是为了防止某种缓冲区溢出吗?或者这只是一个设计缺陷? 我想...

回答 1 投票 0

如何存储动态C字符串?

对于我大学数据结构课上的作业,我们必须为回文类定义函数,该函数接受一个单词,检查它是否是回文,将其存储为单词的一半,并且可以访问

回答 1 投票 0

为什么这里的strlen等于25?

这样我就可以确认我所认为的事情是否真的发生了。当我将(26 个字母)字母表作为输入时,以下代码会打印出 25,是不是因为 fgets 总是自动...

回答 2 投票 0

(C语言)为什么这里的strlen等于25?

这样我就可以确认我认为正在发生的事情是否真的发生了。当我将(26 个字母)字母表作为输入时,以下代码会打印出 25,这是因为 fgets 总是自动...

回答 1 投票 0

将 string_view 转换为 char* 并带走它

这里提出了如何将 std::string_view 转换为 char* 的问题,答案基本上是:“从视图中创建一个临时字符串(制作副本)并使用其 c_str()”。 那个工作...

回答 1 投票 0

如果我想将 Cstring 中的下一个标记用作 int,如何获取它? (c++)

我的目标是从用户那里获取指示,并最终通过文本文件来移动机器人。问题是我必须使用 C 风格的字符串(例如 char word[];)而不是 std::string 类,并且...

回答 4 投票 0

C++ 逻辑错误:strstr 函数未找到可用条目

我编写了下面的代码来尝试使用 strstr() 函数在列表中搜索名称,但没有找到。 有人可以解释一下为什么此代码无法找到我要查找的名称吗? #

回答 1 投票 0

C 字符数组的长度与预期不同

我有一个非常简单的代码: Secret[]="abcdefgh";//这是在不同的函数中声明的,并且是随机单词 int len=strlen(secret);//本例中为 8 字符字[len]; for(int a=0;a 我有一个非常简单的代码: secret[]="abcdefgh";//this is declared in different function and is random word int len=strlen(secret);//ofc it is 8 in this case char word[len]; for(int a=0;a<len;a++){//expecting this will put '_' at positions 0-7 word[a]='_'; } printf("%d %s",(int)strlen(word),word); 但是,strlen(word)返回11并且word包含"________� @",因此存在一些我看不到的明显内存泄漏。任何想法? 此字符数组由字符串文字初始化 secret[]="abcdefgh"; 有 9 个元素,因为它还包括字符串文字的终止零。所以上面的定义相当于 secret[9]="abcdefgh"; 函数strlen返回字符数组中终止零之前的元素数量。所以在这个声明中 int len=strlen(secret); 变量 len 由 8 初始化 作为结果声明 char word[len]; 相当于 char word[8]; 在这个循环中 for(int a=0;a<len;a++){//expecting this will put '_' at positions 0-7 word[a]='_'; } 数组的所有元素都设置为 '_'。 arry 没有终止零。因此,将函数 strlen 应用于数组具有未定义的行为。 您可以通过以下方式更改循环 int a = 0; for(;a<len - 1;a++){//expecting this will put '_' at positions 0-7 word[a]='_'; } word[a] = '\0'; 在这种情况下,函数 strlen 将返回数字 7,并且程序将是格式良好的。 您只需以 nul 终止字符串,将 len 加 1,然后以 nul 终止字符串。 #include <stdio.h> #include <string.h> int main(void) { char secret[]="abcdefgh"; int len=strlen(secret); char word[len+1]; for(int a=0;a<len;a++) { word[a]='_'; } word[a]=0; //or word[a]='\0' printf("%d %s",(int)strlen(word),word); return 0; } 关于内存泄漏,是的。 乍一看,您似乎忘记将 null 放在 char 数组(指针)的末尾。 根据我的经验,这会导致缓冲区溢出或堆栈损坏。 一增加一修改 字符字[len];需要用 char word[len+1] 更改; 添加一行 world[len] = ' ';在最后一个 printf 行之前。 就这样吧 没有空间容纳'\0'。 // "abcdefgh" // 01234567 您需要为 NUL 终止符定义带有空格的单词。 char word[len + 1]; // "abcdefgh" // 012345678 -- word[8] gets '\0'

回答 5 投票 0

如何修复警告“格式指定类型'void *'但参数具有类型'char'警告”

我得到了我想要的输出,但不知道如何摆脱这些警告。任何帮助表示赞赏。 警告: 格式指定类型“void *”,但参数类型为“char”[-Wfor...

回答 1 投票 0

检查数组中重复字符的程序

我一直在尝试制作一个程序,从用户那里获取一个数组,并检查其中是否有任何相邻的重复字符,如果有,程序会要求用户输入

回答 3 投票 0

在 C 中交换字符串时出现意外行为

我是编程初学者,今天我试图用某种原始的蛮力逻辑交换两个字符串。但我偶然发现了这种行为: 我的代码: #包括 #包括...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.