如何将字符串作为参数传递,然后在C中返回字符串
我试图找出如何将一个字符串作为参数传递,然后在C中返回另一个字符串。我只是通过添加测试来练习。这是一个项目,我陷入其中,我需要做一些验证字符串,并希望在一个单独的函数它。显然,我的示例比它应该的复杂,但我需要知道如何操作作为参数传递的字符串,然后将其作为另一个字符串返回如何将字符串作为参数传递,然后在C中返回字符串,c,string,char,return,parameter-passing,C,String,Char,Return,Parameter Passing,我试图找出如何将一个字符串作为参数传递,然后在C中返回另一个字符串。我只是通过添加测试来练习。这是一个项目,我陷入其中,我需要做一些验证字符串,并希望在一个单独的函数它。显然,我的示例比它应该的复杂,但我需要知道如何操作作为参数传递的字符串,然后将其作为另一个字符串返回 #include <stdio.h> #include <string.h> #include <stdlib.h> void stringCopy(char *); int m
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void stringCopy(char *);
int main()
{
char delay;
char string[10];
printf("Enter the string: ");
scanf("%s", string);
char newString[20];
strcat(newString, stringCopy(string));
printf("String: %s", newString);
delay = getchar();
delay = getchar();
}
/*char stringCopy(char *str)
{
char string2[20] = "test";
strcat(string2, str);
return string2;
}*/
char* stringCopy(char *str)
{
char *string2 = malloc(sizeof(char)*20);
strcpy(string2,"test");
strcat(string2, str);
return string2;
}
#包括
#包括
#包括
无效副本(字符*);
int main()
{
字符延迟;
字符串[10];
printf(“输入字符串:”);
scanf(“%s”,字符串);
char-newString[20];
strcat(新闻字符串、stringCopy(字符串));
printf(“字符串:%s”,新闻字符串);
delay=getchar();
delay=getchar();
}
/*char stringCopy(char*str)
{
char string2[20]=“测试”;
strcat(string2,str);
返回字符串2;
}*/
char*stringCopy(char*str)
{
char*string2=malloc(sizeof(char)*20);
strcpy(string2,“测试”);
strcat(string2,str);
返回字符串2;
}
这是我的小练习程序的全部代码,提前感谢您的帮助
**编辑以显示更改。我只是不知道如何访问main()中的new(string2)
伊迪丝2:我就是看不懂。我真的很感谢大家的帮助。真令人沮丧。我将继续尝试,但我甚至不明白为什么会出现错误,或者如何访问main()中的新字符串
edit3:我是个白痴,我的文件扩展名是.cpp而不是.c.你需要返回字符串,而不是字符。试试这个:
char* stringCopy(char *str)
{
char *string2 = malloc(sizeof(char)*20);
strcpy(strin2,"test");
strcat(string2, str);
return string2;
}
stringCopy()
的问题是string2
只存在于函数内部。一旦到达最后的}
,对象就不再存在,其他函数对它的任何引用都是错误的
您需要为结果(1)传递一个指针,或者返回一个指向某个对象的指针,该对象将在函数终止后继续存在(2)
有两种常见的方法来处理这种情况。您可以在堆上分配空间来保存新生成的字符串,也可以向函数传递一个附加参数来告诉它在哪里存储新字符串 在堆上分配新字符串
char *stringCopy(char* src) {
char* dst = malloc(strlen(src) + 4 + 1);
strcpy(dst, "test");
strcat(dst, src);
return dst;
}
int main() {
char string[10];
printf("Enter the string: ");
scanf("%s", string);
char* newString = stringCopy(string);
printf("String: %s", newString);
free(newString); // important!
}
作为参数传入缓冲区
void stringCopy(char* src, char* dst) {
strcpy(dst, "test");
strcat(dst, src);
}
int main() {
char string[10];
printf("Enter the string: ");
scanf("%s", string);
char newString[20];
stringCopy(string, newString);
printf("String: %s", newString);
}
通常,在传递缓冲区时,还需要传递缓冲区大小,以便函数正常地失败,而不是使缓冲区溢出。这里有什么问题?是否得到错误的结果?我不知道如何访问main()中的新字符串(string2),只需将函数return保存在
char*
变量中即可。然后像其他字符串一样使用它。别忘了free()
it。另外,请注意Rikayan支持动态分配。基于堆栈的数组将在函数返回时丢失。。。虽然这意味着你必须在你的主程序中释放它。是的,他的代码解决了我的一个问题。主要是访问它,这是我的下一个困难所在。我应该在最初的代码中明确说明这一点,你能解释char*dst=malloc(strlen(src)+4+1)代码>对我来说,因为它说“从'void*'到'char*'的转换无效”是一个错误。谢谢@用户可能需要一个演员。“错误”<代码>无效的转换从“空白*”到“char *”/代码>在C.中不是错误的,你需要使用C编译器来编译C代码。我是个白痴,我用C++而不是C。这整个事情可能完全错了。
char *stringCopy(char* src) {
char* dst = malloc(strlen(src) + 4 + 1);
strcpy(dst, "test");
strcat(dst, src);
return dst;
}
int main() {
char string[10];
printf("Enter the string: ");
scanf("%s", string);
char* newString = stringCopy(string);
printf("String: %s", newString);
free(newString); // important!
}
void stringCopy(char* src, char* dst) {
strcpy(dst, "test");
strcat(dst, src);
}
int main() {
char string[10];
printf("Enter the string: ");
scanf("%s", string);
char newString[20];
stringCopy(string, newString);
printf("String: %s", newString);
}