新手求教关于指针和地址的问题!

u010554015 2013-05-03 07:01:31
我想从**argv里把所有字符复制到一个新的指针数组*ar[10]里。按我的理解ar[i]里存放的应该是新的char数组的首地址,但是运行结果不对。问题出在哪里?先谢谢各位大哥了

#define NB_OF_ARGS 10
int main(int argc, char **argv) {
int i,j;
if (argc != NB_OF_ARGS + 1) {
printf("Run the program with 10 command line arguments please.\n");
return EXIT_FAILURE;
}
/* REPLACE WITH COMMENT WITH YOUR CODE */


char *ar[NB_OF_ARGS];

for(i=1;i<NB_OF_ARGS;i++){
ar[i-1]=(char*)malloc(sizeof(char)*32);
char a[strlen(argv[i])+1];
for(j=0;j<strlen(argv[i])+1;j++){
a[j]=argv[i][j];
}
*ar[i-1]=a;
}
}
...全文
109 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
14号选手 2013-05-03
  • 打赏
  • 举报
回复
不是,"afa"这个字符串此时是存放在静态区,指针变量a只是存放这个字符串的首地址,也就是字母a的地址 如果你在初始化的时候就这样写的话,就是上面的解释 如果这样写也是可以的
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char *a=NULL;
	char b[]="afa";
	a=(char *)malloc(sizeof(char)*4);
	a=b;
	printf("%s\n",a);
	return 0;
}
u010554015 2013-05-03
  • 打赏
  • 举报
回复
引用 3 楼 xuchao1229 的回复:
楼上的说的对 也可以用sscanf来进行传递 还有一点,就是申请了内存,用完了之后一定要记得归还内存
如果 char *a='afa',那么系统是怎么操作的?是不是先在内存里申请一段空间给'afa'然后再把这段空间的地址传给a来存储?
u010554015 2013-05-03
  • 打赏
  • 举报
回复
引用 2 楼 bluewanderer 的回复:
先看遍书。不过国内的书应该都不会提过你写的char a[strlen(argv[i])+1];... 你应该直接strcpy(ar[i - 1], argv[i])。a是个完全没必要的东西,你已经给ar[i - 1]申请内存了,直接复制进去就好了。a的空间是在栈中申请的,循环结束就被下次循环的a覆盖了。而你让ar[i - 1]指向a,前面malloc申请的内存指针也就丢失了,没办法释放了。诸如此类的各种问题...
谢谢!其实我不是很能理解申请地址。在我这段代码里,我给ar[i-1]申请了一段内存空间,然后我从argv里copy一段string过来,如果string的大小超过了申请的地址空间的话是不是会截断字符串?
u010554015 2013-05-03
  • 打赏
  • 举报
回复
引用 4 楼 derekrose 的回复:
char a[strlen(argv[i])+1]; 这句可以执行的吗
能执行
derekrose 2013-05-03
  • 打赏
  • 举报
回复
char a[strlen(argv[i])+1]; 这句可以执行的吗
14号选手 2013-05-03
  • 打赏
  • 举报
回复
楼上的说的对 也可以用sscanf来进行传递 还有一点,就是申请了内存,用完了之后一定要记得归还内存
bluewanderer 2013-05-03
  • 打赏
  • 举报
回复
先看遍书。不过国内的书应该都不会提过你写的char a[strlen(argv[i])+1];... 你应该直接strcpy(ar[i - 1], argv[i])。a是个完全没必要的东西,你已经给ar[i - 1]申请内存了,直接复制进去就好了。a的空间是在栈中申请的,循环结束就被下次循环的a覆盖了。而你让ar[i - 1]指向a,前面malloc申请的内存指针也就丢失了,没办法释放了。诸如此类的各种问题...

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧