c语言新手请教一个循环给字符串指针数组赋值的问题

please_call_me_J 2014-02-14 03:14:16

char* STR_CHOICE_D[50];
U8 str[70];
for(i.....){
//此处改变str的值
STR_CHOICE_D[i]=str;
}

MessageBox( STR_CHOICE_D[0],"提示",MB_OK); //期望应该等于 A 实际输出 C
MessageBox( STR_CHOICE_D[1],"提示",MB_OK); //期望应该等于 B 实际输出 C
MessageBox( STR_CHOICE_D[2],"提示",MB_OK); //期望应该等于 C 实际输出 C

//也就是所有数组都保存着最后一个字符串,我猜是因为str赋值给STR_CHOICE_D[i]的时候赋的是地址,所有下标都指向的同一个地址


怎么解决这个问题?
...全文
349 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-02-14
  • 打赏
  • 举报
回复
纠正上帖:
char* STR_CHOICE_D[50];
char str[70];
char *p;
int n;
p=str;
for(int i=0;i<3;i++) {
    n=sprintf(p,"%c",'A'+i);
    STR_CHOICE_D[i]=p;
    p+=n+1;
}

MessageBox( STR_CHOICE_D[0],"提示",MB_OK); // A
MessageBox( STR_CHOICE_D[1],"提示",MB_OK); // B
MessageBox( STR_CHOICE_D[2],"提示",MB_OK); // C
赵4老师 2014-02-14
  • 打赏
  • 举报
回复
char* STR_CHOICE_D[50];
char str[70];
char *p;
int n;
p=str;
for(int i=0;i<3;i++) {
    n=sprintf(p,"%c",'A'+i);
    p+=n+1;
    STR_CHOICE_D[i]=p;
}

MessageBox( STR_CHOICE_D[0],"提示",MB_OK); // A
MessageBox( STR_CHOICE_D[1],"提示",MB_OK); // B
MessageBox( STR_CHOICE_D[2],"提示",MB_OK); // C
AndyStevens 2014-02-14
  • 打赏
  • 举报
回复
U8 str[70]; 
这个是什么?
图灵狗 2014-02-14
  • 打赏
  • 举报
回复
改为如下的试试: //char* STR_CHOICE_D[50]; char STR_CHOICE_D[50][70]; U8 str[70]; for(i.....){ //此处改变str的值 //STR_CHOICE_D[i]=str; memcpy(&STR_CHOICE_D[i][0], &str[0], 70); }
引用 楼主 juyangjia 的回复:

char* STR_CHOICE_D[50];
U8 str[70];
for(i.....){
	//此处改变str的值
	STR_CHOICE_D[i]=str;
}

MessageBox( STR_CHOICE_D[0],"提示",MB_OK); //期望应该等于  A  实际输出 C  
MessageBox( STR_CHOICE_D[1],"提示",MB_OK); //期望应该等于  B  实际输出 C
MessageBox( STR_CHOICE_D[2],"提示",MB_OK); //期望应该等于  C  实际输出 C

//也就是所有数组都保存着最后一个字符串,我猜是因为str赋值给STR_CHOICE_D[i]的时候赋的是地址,所有下标都指向的同一个地址
怎么解决这个问题?

69,382

社区成员

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

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