有几个错误:
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
缓冲区。