我想使用函数strtoArg()继续一个字符串Arg [10] [50]的数组, 它应该返回两个值,一个是变量'ArgNo',它是Arg的数字(将通过值)&另一个是Arguments数组变量'arg'(将通过引用传递)。 帮我解决这个问题,如何从函数中获得正确的Arg值 提前谢谢。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define IN
#define OUT
int strtoArg (IN char* instr, OUT char &arg)
{
char *pch,temp[10][50];
int ArgNo=0,j;
pch = strtok (instr," -");
while (pch != NULL){
strcpy((char*)(temp[ArgNo]),pch);
arg = &temp[ArgNo];
pch = strtok (NULL, " -");
ArgNo++;
}
return ArgNo;
}
int main()
{
char Instr[50],Arg[10][50];
int ArgNum,i;
gets(Instr);
ArgNum = strtoArg(Instr,*Arg);
for(i=1; i<ArgNum; ++i)
printf("%s",Arg[i]);
return 0;
}
我试着这样做,
int strtoArg (IN char* instr, OUT char* arg)
{
char *pch;
int ArgNo=0,j;
pch = strtok (instr," -");
while (pch != NULL){
strcpy((char*)arg[ArgNo],pch);
pch = strtok (NULL, " -");
ArgNo++;
}
return ArgNo;
}
int main()
{
char Instr[50],Arg[10][50];
int ArgNum,i;
gets(Instr);
ArgNum = strtoArg(Instr,*Arg);
printf("here");
for(i=1; i<ArgNum; ++i)
printf("%s",Arg[i]);
return 0;
}
删除错误但会产生分段错误。 我在正确的道路上吗?
答案 0 :(得分:1)
我修改了您的代码,请参阅以下内容:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define IN
#define OUT
int strtoArg (IN char* instr, OUT char arg[][50])
{
char *pch;
int ArgNo=0,j;
pch = strtok (instr," -");
while (pch != NULL){
strcpy(arg,pch);
arg++;
pch = strtok (NULL, " -");
ArgNo++;
}
return ArgNo;
}
int main()
{
char Instr[50],Arg[10][50];
int ArgNum,i;
gets(Instr);
ArgNum = strtoArg(Instr, Arg);
for(i=1; i<ArgNum; ++i)
printf("%s\n",Arg[i]);
return 0;
}
代码中的陷阱是:
ArgNum = strtoArg(Instr,*Arg);
中main()
。 *Arg
并不意味着2D数组的地址。int strtoArg (IN char* instr, OUT char &arg)
。 &arg
是C ++中的引用,它意味着您将在调用函数时修改调用者中的变量。但是,您传递的只是一个数组名称,并且没有必要为自己更改值。arg = &temp[ArgNo];
似乎你想“返回”一个本地数组,不幸的是,你不应该这样做。您不能返回存储在堆栈中的任何本地数据,因为它会在函数返回后被破坏。除此之外:参数char arg[][50]
,arg
表示'指向char [50]数组'的指针,当arg++
转到Arg[10][50]
的“下一行”时}。嗯,虽然它可能适合你的需要,但也许缺乏灵活性。