我是C的新手,我正在尝试编写一个简单的程序来连接两个字符串。在我的Linux机器上运行时,我得到以下异常:
test.c:12:10:错误:'strcat'的冲突类型
请你帮我理解我在这里缺少的东西:
#include<stdio.h>
#include<string.h>
void main() {
// string concatenation
char str1[] = {'S', 'h'};
char str2[] = {'X', 'y'};
strcat(str1, str2);
}
void strcat(char str1[], char str2[]) {
int index;
int str1_length = strlen(str1);
for(index=0; index<strlen(str2); index++) {
str1[index + str1_length] = str2[index];
}
}
答案 0 :(得分:5)
您的strcat
没有standard signature:
char *strcat(char *dest, const char *src);
如果要包含string.h
,则需要使其匹配。或者,只需为您的实现提供不同的名称(例如my_strcat
)。
您可能还希望null终止测试字符串 - 否则这些strlen
调用会给您带来非常有趣的结果。另外,为了避免写入超过第一个字符串分配的内存的末尾(从而导致未定义的行为),请确保为其提供足够的空间以容纳最后的第二个字符串。
答案 1 :(得分:2)
除了其他人对名称冲突所说的话,你也没有正确的字符串。
在C中,字符串以空终止符(\0
)结束。
你已经按照这种方式制作了字符串:
char str1[] = {'S', 'h'};
所以它只有两个字符,S和h。
要使字符串可以被strlen
等函数使用,它必须具有空终止符
我建议:
char str1[] = {'S', 'h', '\0'};
答案 2 :(得分:2)
在C语言中有预定义的函数“strcat”(在string.h中),所以当你试图调用strcat时,编译器似乎在inbuild函数和你定义的函数之间发生冲突。所以最好重命名你的strcat函数。
答案 3 :(得分:2)
您的代码中存在许多错误。首先,字符串str1和str2应为空终止。您可以通过将其声明更改为
来更正此问题char str1[] = "Sh";
char str2[] = "Xy";
或
char str1[] = {'S', 'h', '\0'};
char str2[] = {'X', 'y', '\0'};
其次,strcat
是保留名称,因此您的主要功能不会调用您的版本,而是调用头文件<string.h>
中的版本。您可以通过重命名函数或不包括标题string.h
来更正此问题。如果你做第二个,你也应该实现函数strlen
,因为它可以在string.h
找到。
答案 4 :(得分:1)
string.h
已提供strcat
,因此只需将您的功能重命名为其他内容。
答案 5 :(得分:1)
string.h
库中已定义strcat
函数,签名为char *strcat(char *Destination, char *Source);
。您的用户定义函数与它冲突。由于C不支持重载,您需要重命名函数。
在连接之前,还必须声明目标字符数组,以便它有足够的空间来容纳连接字符串。如果没有,你将遍历数组绑定,这可能会导致奇怪的问题。
此外,您的字符串应该以null结尾,因为标准库依赖于它来确定字符串结束的位置。如果没有null终止符,strlen
无法计算字符串长度(除非偶然下一个内存位置碰巧有一个NULL字符 - 你不应该依赖这样的事故)。
答案 6 :(得分:1)
您的函数不能具有该名称,因为它是在string.h中声明的。只需将您的函数重命名为myStrcat或其他类似的东西。
答案 7 :(得分:1)
将strcat
替换为str_cat
,因为您的函数名称与string.h
#include<stdio.h>
#include<string.h>
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<strlen(str2); index++) {
str1[index + str1_length] = str2[index];
}
}
答案 8 :(得分:0)
只需更改您的代码,如下所示:
replace char str1[] = {'S', 'h'} by char str1[] = {'S', 'h', '\0'};
replace char str2[] = {'X', 'y'} by char str2[] = {'X', 'y', '\0'};
答案 9 :(得分:0)
#include<stdio.h>
#include<string.h>
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<strlen(str2); index++) {
str1[index + str1_length] = str2[index];
}
str1[index + str1_length] = '\0';
printf("%s\n",str1);
}