c语言新手请教一个循环给字符串指针数组赋值的问题
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]的时候赋的是地址,所有下标都指向的同一个地址
怎么解决这个问题?
------解决方案--------------------
改为如下的试试:
//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);
}
引用: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]的时候赋的是地址,所有下标都指向的同一个地址
怎么解决这个问题?
------解决方案--------------------
U8 str[70];这个是什么?
------解决方案--------------------
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
------解决方案--------------------
纠正上帖:
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