求解释? 为什么指针数组c所有的元素c[0]、c[1]、...、.c[i]都被赋值成最后一个c[i]的值了?

int main()
{
int i=0;
char *c[100],sub[20];
char *subString(char *src,char *sub ,int i,int j);
char *expr="123456789";
puts(expr);
while(i<strlen(expr))
{
c[i++]=subString(expr,sub ,0,i);
//c[i++]=sub;
printf("%s\n",c[i-1]);
}
printf("=======================\n");
i=0;
while(i<strlen(expr))
{
printf("%s\n",c[i]);
i++;
}
}

char *subString(char *src,char *sub ,int i,int j)
{
int x=0;
if(i>=0&&j<=strlen(src))
{
for(i;i<=j;i++,x++)
sub[x]=src[i];
sub[x]='\0';
return sub;
}else
exit(1);
}

//我把你程序稍作修改,你错误的主要原因:
1 . 指针数组,数组里面放的都是指针;
2 . 指针数组里面的指针你都指向了sub;而sub虽你取字串的一直在加,ex 开始为 1 接着12....最 后变为123456789,所以最终所有指针都指向sub,即123456789;
3. 要解决次问题,需要没每个指针开辟空间来存放字串;

#include <stdio.h>
#include <string.h>
#include <malloc.h>

char *subString(char *src,char *sub ,int i,int j);

int main()
{
int i=0;
char *c[100],*sub;

char *expr="123456789";
puts(expr);

while(i < (int)strlen(expr))
{
sub = (char*)malloc(sizeof(char)*20);
c[i++]=subString(expr,sub ,0,i);
//c[i++]=sub;
printf("%s\n",c[i-1]);
}
printf("=======================\n");
i=0;
while(i<(int)strlen(expr))
{
printf("%s\n",c[i]);
i++;
}

return 0;
}

char *subString(char *src,char *sub ,int i,int j)
{
int x=0;
if(i>=0 && j<= (int)strlen(src))
{
for(i;i<=j;i++,x++)
sub[x]=src[i];
sub[x]='\0';
return sub;
}
else
return "";
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-30
-.-!
你看你对函数subString的调用,传进去的是main里定义的sub,subString又将这个东东返回了,你调用了那么多次,返回的都是同一个sub,当然改的也都是同一个sub追问

我是把字符串exper截取子串放到sub里了,然后放进c[0],c[1],c[2]、、、中,但是每次都把c[0],c[1],c[2]、、中的改了啊???

追答

char *c[100]
那么你觉得c[1]是什么类型呢?
是 char * 啊
就是一个指针阿
你每次对c[i]的赋值都赋的是sub啊,所以,c[i]都指向sub,就是指向同一个东东了,所以最后输出的都一样了

相似回答