gpt4 book ai didi

c - 在c中通过引用传递字符串数组

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:16 25 4
gpt4 key购买 nike

我想使用函数 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;
}

它消除了错误但造成了段错误。我走在正确的道路上吗?

最佳答案

我修改了你的代码,见下面:

#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;
}

代码中的陷阱是:

  1. ArgNum = strtoArg(Instr,*Arg);main() 中。 *Arg 不是二维数组的地址。
  2. int strtoArg (IN char* instr, OUT char &arg)&arg在C++中是一个引用,意思是你在调用函数的时候会修改caller中的变量。但是,你传递的只是一个数组名,它本身不需要改变值。
  3. arg = &temp[ArgNo]; 似乎您想“返回”本地数组,不幸的是,您不应该这样做。您不能返回存储在堆栈中的任何本地数据,因为它会在函数返回后被破坏。

旁白:参数char arg[][50]arg表示“指向char[50]数组的指针”,当arg++ 它转到 Arg[10][50] 的“下一行”。嗯,虽然它可能符合您的需求,但可能缺乏灵 active 。

关于c - 在c中通过引用传递字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6757890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com