Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字符串作为参数传递,然后在C中返回字符串_C_String_Char_Return_Parameter Passing - Fatal编程技术网

如何将字符串作为参数传递,然后在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

我试图找出如何将一个字符串作为参数传递,然后在C中返回另一个字符串。我只是通过添加测试来练习。这是一个项目,我陷入其中,我需要做一些验证字符串,并希望在一个单独的函数它。显然,我的示例比它应该的复杂,但我需要知道如何操作作为参数传递的字符串,然后将其作为另一个字符串返回

    #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);
}