#include <stdio.h>
#include <string.h>
char Jones(char, char);
int main() {
char name[]="Andrew";
char surname[]="Jones";
char result[80];
result=Jones(name, surname);
puts(result);
return 0;
}
char Jones(char name, char surname)
{
char result[80];
int length;
length = strlen(surname);
for (int i=0; i<50; i++)
{
result[length+i] = name[i];
}
return result;
}
该程序无法编译,我不知道为什么。它应该读取两个字符串并交换它们的位置。它应该显示例如。 “琼斯安德鲁”。
答案 0 :(得分:2)
这是一个问题:
char name[]="Andrew";
char surname[]="Jones";
char result[80];
wynik=Jones(name, surname);
这会调用带有字符数组的Jones()
(它会衰减到字符指针),但声明该函数只接受单个字符。
您应该将函数更改为char *name, char *surname
,因为它似乎确实需要字符串。
此外,你不能像在Jones()
中那样返回一个字符数组,你需要阅读很多关于如何在C中处理字符串的内容。
此外,wynik
看起来未声明,这也会使其无法构建。
答案 1 :(得分:1)
有一些错误:
char Jones(char, char);
这只需要一个字符,而不是字符串所需的字符*。
result=Jones(name, surname);
这里的结果是一个数组。在C中,您无法分配数组。
char Jones(char name, char surname)
{ char result[80];
...
return result;
}
这里返回result
这是一个局部变量。但是要返回一个字符串,你需要返回一个char *。但是char *会指向Jones函数中的局部变量,该函数在函数结束时不再有效。一种解决方案是传入一个缓冲区,您可以在其中写入调用者拥有的结果。
用于组合surename和name的算法也是错误的,你永远不会对surename做任何事情。
你需要这样做:
char *Jones(char*, char* , char *);
int main() {
char name[]="Andrew";
char surname[]="Jones";
char result[80];
char *p;
p = Jones(name, surname, result);
puts(p);
return 0;
}
char *Jones(char *name, char *surname, char *result)
{
int length;
int i,k;
length = strlen(surname);
for (i=0; i<length ; i++)
{
result[i] = surname[i];
}
result[i++] = ' '; //add a space
length = strlen(name);
for (k=0; k<length ; k++, i++)
{
result[i] = name[k];
}
result[i] = 0; //add nul terminator to end the string
return result;
}
可以通过多种方式简化连接,例如:到
strcpy(result, surename);
strcat(result, " ");
strcat(result, name);
或琼斯功能可以做:
sprintf(result, "%s %s", surename, name);
在所有情况下,该函数都相当脆弱,因为如果传入的内容不适合result
缓冲区,则很容易溢出结果缓冲区。
答案 2 :(得分:0)
1)name
和surname
是char数组而不是单个char,因此您必须更改函数Jones()
的输入参数类型,输入参数类型应为{{1 (char数组)或char name[]
(指向char数组的指针)
2)您无法在函数中返回本地和静态定义的数组。如果你想从函数中返回一个字符串,那么字符串应该是常量,或者应该是一个动态分配的缓冲区(char *name
,malloc
,calloc
)到函数中两种情况下,函数类型应为realloc
而不是char *Jonas()
或者您可以通过输入参数传递char Jonas()
数组。在这种情况下,您可以将其填入函数。
result
并在主要内容:
void Jones(char *name, char *surname, char *result)
3)以下char result[80];
Jones(names, surname, result);
循环遗漏了一些东西
for
元素for (int i=0; i<50; i++)
{
result[length+i] = name[i];
}
到元素result
的{{1}}元素包含垃圾,因为0
数组未启动。所以当你length
result
数组时,你会得到打印的垃圾。您必须在printf
数组
result
到0
之间启动元素
答案 3 :(得分:0)
#include <stdio.h>
#include <string.h>
char* Jones(char*, char*);
int main() {
char name[]="Andrew";
char surname[]="Jones";
puts(Jones(name,surname));
return 0;
}
char* Jones(char *name, char *surname)
{
strcat(surname," ");
strcat(surname,name);
return surname;
}