C 如何使用一个函数动态返回数字或字符串?
如何在一个函数中返回字符串或数字 例如:C 如何使用一个函数动态返回数字或字符串?,c,function,return-type,C,Function,Return Type,如何在一个函数中返回字符串或数字 例如: int main() { printf("%s",rawinput("What is your name: ", "s")); printf("%d", rawinput("How old are you: ", "n")); } ([int] or [char *]) rawinput(char *message, char *type) { if(!strcmp(type,"n")){ int value; scanf("
int main()
{
printf("%s",rawinput("What is your name: ", "s"));
printf("%d", rawinput("How old are you: ", "n"));
}
([int] or [char *]) rawinput(char *message, char *type)
{
if(!strcmp(type,"n")){
int value;
scanf("%d",&value);
return value;}
else if(!strcmp(type, "s")){
char *value[1024];
fgets(value,1024,stdin);
return value;}
}
请注意,定义rawinput函数的方式会根据需要而改变。不要这样做。有一种方法,但这是一种不好的做法,你不应该使用它。这里有一个更好的选择:
typedef union RAWINPUT_UNION
{
char *string;
int integer;
}RAWINPUT;
RAWINPUT rawinput(char *message, char *type)
{
char *resultstring
int resultinteger;
RAWINPUT ri;
// Blah blah blah some code here.
if(type[0] == 's')
ri.string = resultstring;
else if(type[0] == 'i')
ri.integer = resultinteger;
return ri;
}
坏的方法是:您可以对指针执行整数运算,并在其中存储变量,因为指针实际上是整数,只是在编译器中有一个附加的抽象层。如果返回值需要是一个printf%s中的char*,则,。。。和一个int printf%d,…,函数的返回类型应该与格式说明符匹配,并且在调用之间应该不同,以避免未定义的行为。让我们使用:
typedef struct {
union {
char *s;
int i;
} u;
char type;
} raw_t;
raw_t rawinput(const char *message, char type) {
raw_t r;
printf("%s", message);
r.type = type;
switch (type) {
case 'n':
if (1 != scanf("%d", &r.u.i)) {
; // handle error;
}
break;
case 's': {
char tmp[1024];
if (1 != scanf("%1023s", tmp)) {
; // handle error;
}
r.u.s = strdup(tmp);
break;
}
default:
; // handle error;
}
return r;
}
int main() {
printf("%s\n", rawinput("What is your name: ", 's').u.s); // Note .u.s
printf("%d\n", rawinput("How old are you: " , 'n').u.i); // Note .u.i
return 0;
}
注意printf%s中的内存泄漏…问题是…?如何使用相同的函数返回数字或字符串。是否必须使用数组执行此操作?必须返回联合或结构。这是错误的字符*值[1024];使用字符值[1024];。你不需要1024个字符串指针。那是我的错别字。我已经用structs做了一些工作,但是一个union?或者这只是另一个名字?解决这个问题,它不能正确地解释问题。