这c语言该函数该如何返回啊?[结构体该如何返回][求助]

时间:2022-07-30 01:00:15
我写了一个扫描函数
写完了
但是不知道如何返回?
谁能告诉如何返回吗 ?
谢谢了
typedef struct{
        char name[10];
        int amount;
        }token;
token scan(char buffer[]){
    int i=0,j=0 ;
    char p[2];
    token result[10];
    p[1]='\0';
    while(buffer[i]!='\0')
         {
        if(buffer[i]==' ')
        {
        j=i;
        while(buffer[j]!='\0')
         {
            buffer[j]=buffer[j+1];
            j++;
         }
        }
           i++;
      }
      i=0;
      j=0;
      while(buffer[i]!='\0'){
        if ((buffer[i]<='9')&&(buffer[i]>='0')&&(buffer[i]!='\0'))
             {
            p[0]=buffer[i];
            result[j].amount=2;
            strcpy(result[j].name,p);
            while((buffer[i+1]<='9')&&(buffer[i+1]>='0')&&(buffer[i]!='\0'))
             {
                p[0]=buffer[i+1];
                strcat(result[j].name,p);
                i++;
              }
         }
        else if(buffer[i]=='+'){
                    result[j].amount=0;
                    strcpy(result[j].name,"+");
             }
        else if(buffer[i]=='*'){
                    result[j].amount=1;
                    strcpy(result[j].name,"*");
             }
        else if(buffer[i]=='('){
                    result[j].amount=3;
                    strcpy(result[j].name,"(");
             }
        else if(buffer[i]==')'){
                    result[j].amount=3;
                    strcpy(result[j].name,")");
             }
        else printf("error\n");
        i++;
        j++;
        }
        printf("the reslut is :\n");
      for(i=0;i<j;i++){
        printf("\n(%d,%s)",result[i].amount,result[i].name);
        }
      }

4 个解决方案

#1


你是不是要返回经过你处理过的结构体数据呢?如果是这样,这跟C返回一个int型用法应该一样吧。
可以用 struct [name]*返回或者直接返回副本struct [name]

你用的方法就可以

#2


你想把这整个数组返回吗?还是返回数组里边的一个啊?
如果返回数据,你需要用malloc分配空间,然后返回它的指针就行了
方法:
token *result=(token*)malloc(size*sizeof(token));//size为你要申请的记录个数
return result;//这是最后的返回,当然,你函数的返回类型也要改变一下;token *scan(...);
不能直接这样子:token result[10],如果你return result;的话,返回的将是一个野指针,它里边的内容可随时被程序刷掉而不存在了

#3


看了一下,既然已经printf("\n(%d,%s)",result[i].amount,result[i].name);想必楼主这个函数扫描完后就把结果输出了,不需要给调用者返回什么信息。就直接把函数改成void scan(char buffer[]),然后return就行了。如果要返回结构体,向楼上说的那样,用malloc分配一块内存,返回指针。

#4


帮UP了。

#1


你是不是要返回经过你处理过的结构体数据呢?如果是这样,这跟C返回一个int型用法应该一样吧。
可以用 struct [name]*返回或者直接返回副本struct [name]

你用的方法就可以

#2


你想把这整个数组返回吗?还是返回数组里边的一个啊?
如果返回数据,你需要用malloc分配空间,然后返回它的指针就行了
方法:
token *result=(token*)malloc(size*sizeof(token));//size为你要申请的记录个数
return result;//这是最后的返回,当然,你函数的返回类型也要改变一下;token *scan(...);
不能直接这样子:token result[10],如果你return result;的话,返回的将是一个野指针,它里边的内容可随时被程序刷掉而不存在了

#3


看了一下,既然已经printf("\n(%d,%s)",result[i].amount,result[i].name);想必楼主这个函数扫描完后就把结果输出了,不需要给调用者返回什么信息。就直接把函数改成void scan(char buffer[]),然后return就行了。如果要返回结构体,向楼上说的那样,用malloc分配一块内存,返回指针。

#4


帮UP了。