我试图弄清楚如何将一个字符串作为参数传递,然后在 C 中返回另一个字符串。我正在通过简单地添加 test 来练习。这是针对一个项目,我被困在需要对字符串进行一些验证并希望在单独的函数中执行此操作。显然,我的示例比应有的更复杂,但我需要知道如何操作作为参数传递的字符串,然后将其作为另一个字符串返回。
#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;
}
这是我的小练习程序的所有代码,提前感谢您的帮助。
**已编辑以显示更改。我只是不知道如何在 main() 中访问新的 new (string2)。
edit2:我似乎无法理解。我真的很感谢大家的帮助。真是令人沮丧。我将继续尝试,但我什至不明白为什么会收到错误或如何访问 main() 中的新字符串。
edit3:我是个白痴,我的文件扩展名为 .cpp 而不是 .c。
最佳答案
您的问题 stringCopy()
是string2
只存在于函数内部。一旦决赛}
到达该对象后,该对象将不再存在,并且其他函数对它的任何引用都是错误的。
您需要传递结果的指针 (1) 或返回指向某个对象的指针,该对象将在函数终止后继续存在 (2)。
/* 1 UNTESTED */
void stringCopy(char *destin, size_t dlen, const char *source) {
int n = snprintf(destin, dlen, "test%s", source);
if (n >= dlen) /* error */;
}
int main(void) {
char test[100];
stringCopy(test, sizeof test, "foobar");
printf("%s\n", test);
}
<小时/>
/* 2 UNTESTED */
char *stringCopy(const char *source) {
int size;
char *tmp;
size = strlen(source) + 5;
tmp = malloc(size);
if (tmp) {
int n = snprintf(tmp, size, "test%s", source);
if (n != size - 1) /* error */;
}
return tmp;
}
int main(void) {
char *test;
test = stringCopy("foobar");
printf("%s\n", test);
free(test);
}
关于c - 如何在C中传递一个字符串作为参数,然后返回一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733034/