strcat 相关问题

标准C函数,用于将源字符串的副本附加到目标字符串。

当我将 strcat 与动态分配的 char 数组一起使用时,为什么我的 C 程序会出现段错误?

我需要一些帮助来理解 strcat 在传入动态分配的 char 数组与使用索引运算符声明的 char 数组时的行为差异。 以下生成一个

回答 1 投票 0

strcat 实现

我尝试自己实现strcat,从Wiki上找到了这样的strcat实现......但是当我使用它时,出现分段错误。 下面的代码有什么问题? 字符* ...

回答 6 投票 0

向 char 数组中添加元素

我一直在尝试用 C 语言创建一个函数,它接受一个字符串作为输入,然后打印出该字符串的仅包含字母字符的版本。 #包括 #包括 我一直在尝试用 C 语言创建一个函数,它接受一个字符串作为输入,然后打印出该字符串的仅包含字母字符的版本。 #include <string.h> #include <ctype.h> char isAlpha(char charArr[]){ int i, j, stringLen, alphaLen; stringLen = strlen(charArr); char alphaArr[30]; for(i= 0; i < stringLen; i++){ if(isalpha(charArr[i]) != 0){ strcat(alphaArr, charArr[i]); } } alphaLen = strlen(alphaArr); for(j = 0; j < alphaLen; j++){ printf("%c", alphaArr[j]); } } 我尝试使用 strcat() 函数在新变量中添加非字母字符,但在主函数中运行它后什么也没有打印出来。 这份带有神奇数字30的宣言 char alphaArr[30]; 声明一个未初始化的字符数组。即其内容未确定。 函数 strcat 声明方式如下 char *strcat(char * restrict s1, const char * restrict s2); 它需要两个指向字符串的指针。所以这个电话 strcat(alphaArr, charArr[i]) 即使忽略第一个参数指向具有不确定内容的数组,也是无效的,至少因为第二个参数具有 uintfeger 类型char而不是指向char的指针。 此外,该函数不返回任何内容,尽管其返回类型不是 void。 该函数应该只做一件事:要么构建一个新字符串,要么只输出传递字符串的字母字符。 由于传递的字符串在函数内不会更改,因此应使用限定符 const 来声明参数。 在任何情况下调用函数strlen都是多余的。 要仅输出字符串的字母字符,可以按以下方式定义函数 void isAlpha( const char charArr[] ) { for ( ; *charArr != '\0'; ++charArr ) { if ( isalpha( ( unsigned char ) *charArr ) ) { putchar( *charArr ); } } } 如果您需要创建一个包含源字符串的字母字符的新数组,那么您需要为包含字符串的新字符数组动态分配内存,并从函数返回指向它的指针。

回答 1 投票 0

getline、strcat 和 realloc 函数的组合使用

大家下午好!我用 C 语言编写了 cat 实用程序的实现,但遇到了一些问题。这是我的代码: #包括 #包括 #包括 #

回答 1 投票 0

传递“strcat”的参数 1 使指针来自整数而不进行强制转换 [-Wint-conversion]

我正在尝试获取 10 个随机数并将它们收集在一个字符数组中以获得随机客户 ID 但它发出了这个警告。无论我做什么都无法解决它。你能帮我吗? char 客户ID(){ ...

回答 1 投票 0

strcat 将字符连接到字符串上?

使用 GDB,我发现当我尝试此操作时出现分段错误: strcat(字符串,¤tChar); 鉴于字符串被初始化为 字符*字符串=“”; 和 currentChar 是 字符

回答 8 投票 0

为什么有些字符在C++中无法编辑?

我正在尝试用 C++ 编写自己的 strcat 函数,但它有一些问题。 我的输入是两个字符 c 和 a,我的函数将返回一个指向 c 与 a 连接的字符的字符指针。 对于

回答 1 投票 0

我想编写一个8086汇编语言程序来实现strcat函数,该函数将一个字符串连接到另一个字符串

我正在学习汇编,在这个例子中我想连接来自用户的两个字符串 数据段 str1 db“输入第一个字符串:$” str2 db“输入第二个字符串:$&

回答 1 投票 0

strcat 使程序崩溃(0xc0000005)

我需要画一行我想要的字符。所以我为此目的编写了一个函数: 无效fDrawLine(int长度) { 整数我; char * compLine = (char *) malloc(WINDOW_WIDTH + 2); 为...

回答 3 投票 0

C 错误需要“char **”,但参数类型为“char (*)[10]”

我正在尝试实现我的 strcat 版本。但是,我收到以下警告,并且我的代码在运行时崩溃。我从 main 传递 &p 来对 main 函数中的变量 p 进行永久更改。

回答 3 投票 0

如何复制或连接两个字符*

如何将 char* 连接或复制在一起? char* 总行数; const char* line1 = "你好"; const char* line2 = "世界"; strcpy(totalLine,line1); strcat(总行数,第2行); 这段代码产生...

回答 4 投票 0

为什么使用 C 引用这个 char 数组会导致堆栈崩溃?

该程序采用一个指向 char 数组和 int 的指针。 char 数组由两个数字组成,并用空格分隔。 该函数的用途是将 char 数组的值读取为整数,并且

回答 2 投票 0

做无元音cs50问题并遇到strcat错误

运行我的程序时: #包括 #包括 #包括 int 主函数(无效) { string word = get_string("给我一个词:" ); int j = strlen...

回答 3 投票 0

使用 srtcat() 添加字符串到字符串的问题

~~ z_goggamal-input.txt ~~ 给我做一个三明治。 什么?自己做。 须藤给我做个三明治。 好的。 这是原始文本文件。我需要更改此文件 ~~这样~~ 给我做一个三明治。

回答 1 投票 0

使用 strcat() 连接字符串时出现段错误

我想使用 strcat 将存储在结构中的每个新标签与 char tags_cell_concat 中的 char 成员连接起来,如下所示: #包括 #包括 #包括 我想使用 strcat 将存储在结构中的每个新标签与 char tags_cell_concat 中的 char 成员连接起来,如下所示: #include <stdio.h> #include <string.h> #include <stdlib.h> #define BUFDATE 50 #define BIGBUFFLEN 1024 typedef struct { char date[BUFDATE]; char tags[BUFDATE]; char task[BUFDATE]; char next_step[BUFDATE]; } Record; int main() { Record *records = (Record *) malloc(2*sizeof(Record)); // all tags: "Hello world I am a string slice function" strcpy(records[0].tags, "Hello world"); strcpy(records[1].tags, "string slice"); strcpy(records[2].tags, "function"); char tags_cell_concat[BIGBUFFLEN] = {0}; char *chunk; char *pointer; for (size_t i=0; i<3; i++){ strcat(tags_cell_concat, " "); pointer = records[i].date; while ((chunk = strsep(&pointer, " ")) !=NULL) { printf("%s\n", chunk); } if (strstr(tags_cell_concat, chunk) != NULL) { strcat(tags_cell_concat, chunk); } } return 0; } 我在运行时遇到分段错误 编辑 在下面的评论和回答之后,上面的代码(我没有更改)确实存在第一个问题,因为没有为records分配足够的空间。我更改了代码以分配足够的内存,但问题仍然存在。如果第 36-39 行被注释掉,段错误问题就会消失,这向我表明问题可能出在使用 strcat() 函数时: #include <stdio.h> #include <string.h> #include <stdlib.h> #define BUFDATE 50 #define BIGBUFFLEN 1024 typedef struct { char tags[BUFDATE]; } Record; int main() { size_t size = 6; Record *records = (Record *) malloc(size*sizeof(Record)); strcpy(records[0].tags, "tag1 tag2"); strcpy(records[1].tags, "tag3"); strcpy(records[2].tags, "tag4 tag2"); strcpy(records[3].tags, "tag1 tag5"); strcpy(records[4].tags, "tag6 tag3"); strcpy(records[5].tags, "tag7 tag2"); strcpy(records[6].tags, "tag8 tag5"); char tags_cell_concat[BIGBUFFLEN] = {0}; char *chunk; char *pointer; for (size_t i=0; i<size; i++){ strcat(tags_cell_concat, " "); pointer = records[i].tags; while ((chunk = strsep(&pointer, " ")) !=NULL) { printf("%s\n", chunk); } if (strstr(tags_cell_concat, chunk) != NULL) // line to comment out and get no seg fault { // line to comment out and get no seg fault strcat(tags_cell_concat, chunk); // line to comment out and get no seg fault } // line to comment out and get no seg fault } return 0; } 这是现在的输出: tag1 tag2 make: *** [runc] Segmentation fault: 11 编辑2 我再次更改了代码,因为我删除了记录中的一个记录,以便它对应于分配的内存。此外,我在 if 语句中检查 chunk 是否不是 NULL(使用 (chunk !=NULL) 是否正确?)。但问题仍然存在。这是代码的最新版本: #include <stdio.h> #include <string.h> #include <stdlib.h> #define BUFDATE 50 #define BIGBUFFLEN 1024 typedef struct { char tags[BUFDATE]; } Record; int main() { size_t size = 6; Record *records = (Record *) malloc(size*sizeof(Record)); strcpy(records[0].tags, "tag1 tag2"); strcpy(records[1].tags, "tag3"); strcpy(records[2].tags, "tag4 tag2"); strcpy(records[3].tags, "tag1 tag5"); strcpy(records[4].tags, "tag6 tag3"); strcpy(records[5].tags, "tag7 tag2"); char tags_cell_concat[BIGBUFFLEN] = {0}; char *chunk; char *pointer; for (size_t i=0; i<size; i++){ strcat(tags_cell_concat, " "); pointer = records[i].tags; while ((chunk = strsep(&pointer, " ")) !=NULL) { printf("%s\n", chunk); } if ((strstr(tags_cell_concat, chunk) != NULL) && (chunk !=NULL)) // line to comment out and get no seg fault { // line to comment out and get no seg fault strcat(tags_cell_concat, chunk); // line to comment out and get no seg fault } // line to comment out and get no seg fault } return 0; } 您仅将内存分配给类型为 Record. 的两个元素的数组 Record *records = (Record *) malloc(2*sizeof(Record)); 所以访问数组元素的有效索引范围是[0, 1]。 但是您使用无效索引2访问数组的元素 // all tags: "Hello world I am a string slice function" strcpy(records[0].tags, "Hello world"); strcpy(records[1].tags, "string slice"); strcpy(records[2].tags, "function"); 导致未定义的行为。 以及这个 for 循环中的条件 for (size_t i=0; i<3; i++){ 也是无效的。 错误的原因之一是您使用了像2和3这样的幻数。而是使用命名常量。 也不是数组元素的所有数据成员都被初始化。所以这些陈述 pointer = records[i].date; while ((chunk = strsep(&pointer, " ")) !=NULL) { printf("%s\n", chunk); } if (strstr(tags_cell_concat, chunk) != NULL) { strcat(tags_cell_concat, chunk); } 还调用未定义的行为。

回答 1 投票 0

如何以省时的方式将数字添加到字符串的中间?

我有这个: #包括 #包括 诠释主要(无效){ const char* pFilename = NULL; pFilename = "Something.png" functionX(pFilename, argX); } 但是……

回答 2 投票 0

不能将特定字符添加到char*的开头,在C语言中它只允许我在后面添加?

在C语言中,我遇到了在字符串开头添加'-'的问题,因为它会导致seg-fault。在字符串的末尾添加'-'似乎没有问题。本质上,有两个字段到 ...

回答 1 投票 0

输出根据函数调用在程序中的位置而改变。

我目前正在学习C语言,为了更好的学习,我想做的一件事就是模仿头文件中的 "strcat "函数。为了更精确的复制,我比较了自己的输出 ...

回答 1 投票 0

当使用strcat时,MPI在进程0中出现奇怪的字符。

我正在做一个项目,寻找5个组中每个项目的相遇频率。默认项目是10个,使用命令mpirun -n 10 .a.out给出了正确的结果,除了过程0的结果。当...

回答 1 投票 0

strcat()将两个字符串连接起来。

我正试图将一张卡片ex. "10""1""A "连接到字符串 "pile"。这是21点的一个非常简化的版本,所以它不关心牌的花色,一次只发一张牌。...

回答 1 投票 0

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