HOME> 世界杯2022年> c - 这个基本的 strcat 实现有什么问题?

c - 这个基本的 strcat 实现有什么问题?

2025-08-11 08:40:25

10 回答 10

This answer is useful

5

您strcat没有标准签名:

char *strcat(char *dest, const char *src);

如果要包含,则需要使其匹配string.h。或者,只需给您的实现一个不同的名称(my_strcat例如)。

您可能还希望以空值终止您的测试字符串 -strlen否则这些调用会给您带来非常有趣的结果。此外,为避免写到第一个字符串分配内存的末尾(从而导致未定义的行为),请确保给它足够的空间以容纳末尾的第二个字符串。

于 2013-01-04T06:19:33.957 回答

This answer is useful

2

您的代码中有很多错误。首先,字符串 str1 和 str2 应该以 null 结尾。您可以通过将其声明更改为

char str1[] = "Sh";

char str2[] = "Xy";

或者

char str1[] = {'S', 'h', '\0'};

char str2[] = {'X', 'y', '\0'};

其次,strcat是一个保留名称,因此您的 main 函数不会调用您的版本,而是在头文件中找到的版本。您可以通过重命名函数或不包含 header 来纠正此问题string.h。如果你做第二个,你也应该实现这个函数strlen,因为它在string.h.

于 2013-01-04T08:15:52.277 回答

This answer is useful

2

除了其他人所说的名称冲突之外,您也没有正确的字符串。

在 C 中,字符串以空终止符 ( \0) 结尾。

你已经用这种方式制作了你的字符串:

char str1[] = {'S', 'h'};

所以它只有两个字符,S 和 h。

要使字符串可由函数使用,例如strlen,它必须有一个空终止符。

我建议:

char str1[] = {'S', 'h', '\0'};

于 2013-01-04T06:32:22.173 回答

This answer is useful

2

C 语言中有预定义的函数“strcat”(在 string.h 中),所以当您尝试调用 strcat 时,编译器似乎在该 inbuild 函数和您定义的函数之间存在冲突。所以最好重命名你的 strcat 函数。

于 2013-01-04T06:34:11.750 回答

This answer is useful

1

string.h已经提供了一个strcat,所以只需将您的函数重命名为其他名称。

于 2013-01-04T06:18:55.560 回答

This answer is useful

1

库中已经strcat定义了一个string.h带有签名的函数char *strcat(char *Destination, char *Source);。您的用户定义函数与之冲突。由于 C 不支持重载,因此您需要重命名函数。

在连接之前,您还必须声明您的目标 char 数组,以便它有足够的空间来保存连接的字符串。如果没有,您将在数组绑定上运行,这可能会导致奇怪的问题。

此外,您的字符串应该以空结尾,因为标准库依赖于它来确定字符串的结束位置。如果没有空终止符,则strlen无法计算字符串长度(除非意外下一个内存位置恰好有一个 NULL 字符 - 您永远不应该依赖此类意外)。

于 2013-01-04T06:19:21.233 回答

This answer is useful

1

您的函数不能具有该名称,因为它是在 string.h 中声明的。只需将您的函数重命名为 myStrcat 或类似的名称。

于 2013-01-04T06:20:04.817 回答

This answer is useful

1

替换strcat为str_cat, 因为您的函数名称与已存在的函数冲突string.h

#include

#include

void main() {

// string concatenation

char str1[] = {'S', 'h'};

char str2[] = {'X', 'y'};

str_cat(str1, str2);

}

void str_cat(char str1[], char str2[]) {

int index;

int str1_length = strlen(str1);

for(index=0; index

str1[index + str1_length] = str2[index];

}

}

于 2013-01-04T06:20:17.237 回答

This answer is useful

0

只需更改您的代码如下:

replace char str1[] = {'S', 'h'} by char str1[] = {'S', 'h', '\0'};

replace char str2[] = {'X', 'y'} by char str2[] = {'X', 'y', '\0'};

于 2013-01-04T07:56:06.803 回答

This answer is useful

0

#include

#include

void mystrcat(char str1[], char str2[]);

void main() {

char str1[] = {'S', 'h' , '\0'};

char str2[] = {'X', 'y', '\0'};

mystrcat(str1, str2);

}

// string concatenation

void mystrcat(char str1[], char str2[]) {

int index;

int str1_length = strlen(str1);

for(index=0; index

str1[index + str1_length] = str2[index];

}

str1[index + str1_length] = '\0';

printf("%s\n",str1);

}

于 2013-01-04T09:05:42.407 回答

工商银行信用卡额度怎么查询?用这几种方法查

机油5W30和0W40是什么意思?加错了有什么危害?一次给你讲清楚

最新发表 newmodule
友情链接 newmodule