关于char的二维数组

z395841923 2017-01-18 09:05:33
#include <stdio.h>
#include <stdlib.h>

int main()
{
char **pt;
int num;
char k[40];

printf("How many words do you wish to enter?");
scanf("%d",&num);
printf("\nEnter %d words now :",num);
pt = (char **)malloc(sizeof(char*)*num);
for(int i =0;i<num;i++)
{
scanf("%s",k);
pt[i]=k;
}
printf("Here are your words:\n");
for(int i=0;i<num;i++)
{
printf("%s\n",pt[i]);
}
return 0;
}


不知道为什么,在全部输入之后,打印出来的全都是最后一个单词
...全文
774 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcgaoshou 2017-01-26
  • 打赏
  • 举报
回复
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char **pt; int num,i; char k[40]; printf("How many words do you wish to enter?"); scanf("%d",&num); printf("\nEnter %d words now :",num); pt = (char **)malloc(sizeof(char*)*num); for( i =0;i<num;i++) { scanf("%s",k); pt[i] = (char *)malloc(strlen(k)+1); strcpy(pt[i],k); } printf("Here are your words:\n"); for(i=0;i<num;i++) { printf("%s\n",pt[i]); free(pt[i]); } free(pt); return 0; }
小灸舞 2017-01-19
  • 打赏
  • 举报
回复
pt[i]其实指向的都是同一个地址(k数组)
自信男孩 2017-01-19
  • 打赏
  • 举报
回复
pt[i]存放的地址值总是k数组的首地址,你的输入都是放到了数组k中,即后面的输入是覆盖到了k之前存放的数据。而所有pt指针都指向k数组,所以你输出的结果都是一样的。
幻夢之葉 2017-01-18
  • 打赏
  • 举报
回复
for(int i =0;i<num;i++) { scanf("%s",k); pt[i]=k; //你让pt[i]全部指向k,当然是一样的 } 下面这样子,记得用完的时候free

   pt = (char **)malloc(sizeof(char*)*num);
   for(int i =0;i<num;i++)
   {
       pt[i] = (char *)malloc(sizeof(char)*40);
       scanf("%s",pt[i] );
   }

70,037

社区成员

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

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