正如你所看到的,我有这个代码它需要一个命令(字符数组)并将它分成两个不同的数组,如果有" |"我想要的是不是用函数打印它,而是将这两个新数组返回到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 ?
}
现在主要有一些不必要的声明,只是为了避免它们我将在以后使用它们。
答案 0 :(得分:1)
要将char *重新调整为主,您需要发送指向您的函数的指针,这些指针附加到您可以使用的内存
例如,
....
char return1[50]
char return2[50]
....
split_function(command, return1, return2);
....
答案 1 :(得分:1)
答案取决于您存储计算结果的位置。
在您当前的实现中,First
和Second
数组都在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
,因为它们将在函数中被修改。