如何返回Char数组?

时间:2015-05-19 17:02:16

标签: c arrays function

正如你所看到的,我有这个代码它需要一个命令(字符数组)并将它分成两个不同的数组,如果有" |"我想要的是不是用函数打印它,而是将这两个新数组返回到main然后打印出来?

我该怎么做?

#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    int a;
    int status,n,i;
    char command[4000];
    write(STDOUT_FILENO,"Shell>",6);
    n=read(STDIN_FILENO,command,4000);
    void getArguments(char **,char*);
    char *getStdOutFileName(char *);
    if(n>0)
    {
        for(i=0;i<n;i++)
        {
            bugrafonk(command,&i);
            printf("%s",First);
            printf("%s",Second);
        }
    }
}

void bugrafonk(char* c,int*length)
{
    int i;
    int a;
    char First[4000];
    char Second[4000];
    for(i=0;i<length;i++)
    {
        if(c[i]=='|')
        {
            i=a;
            for(i=0;i<a;i++)
            {
                char First[i];
            }
            printf("---");
            for(i=a;a<length;i++)
            {
                char Second[i];
            }
        }
    }
    return(First,Second);                   //is this  true ?
}

现在主要有一些不必要的声明,只是为了避免它们我将在以后使用它们。

4 个答案:

答案 0 :(得分:1)

要将char *重新调整为主,您需要发送指向您的函数的指针,这些指针附加到您可以使用的内存

例如,

....
char return1[50]
char return2[50]
....
split_function(command, return1, return2);
....

答案 1 :(得分:1)

答案取决于您存储计算结果的位置。 在您当前的实现中,FirstSecond数组都在bugrafonk函数内分配,因此在函数完成时将被销毁。

一种可能的选择是为函数外部的结果数组分配内存,并将指针传递给函数。

char first[4000], second[4000];
bugrafonk(..., first, second);
// use first and second

bugrafonk的实施:

void bugrafonk(your arguments..., char *first, char *second)
{
    ...
}

另外,我不知道神秘的单词bugrafonk是什么意思;)

答案 2 :(得分:0)

此处实现的函数通过终止第一部分来拆分字符串,并返回指向第二部分的指针。

您不需要返回2条信息,因为您已经知道第一个字符串的位置。请注意,如果传递字符串文字,则无法执行此操作,因为您无法对其进行修改,但这不是这种情况。

setlocal

节目输出:

SETLOCAL enabledelayedexpansion
FOR /F "tokens=*" %%G IN ('DIR /B %SRCFOLDER%') DO (
    ECHO %%G
    CALL tooltipInfo.bat %%G 19 | FIND /C "Star" > test.txt
    SET /P TEMPCODE=<test.txt
    ECHO !TEMPCODE!
    ECHO.
)

答案 3 :(得分:0)

您可以选择返回指向char的指针,然后传递将在函数体中修改的两个数组。:

char *func(char arr[], char* arr2 /* other parameters */)
{   /* process arr and arr2 */        

    // return new array one. arr2 doesn't need to be returned.
    return arr; 
}

// in main:
char command[4000];
char arr2[4000];                  // First
char *arr3 = func(command, arr2); // Second

或者只是将所有数组作为参数传递给函数,然后返回void,因为它们将在函数中被修改。