【发布时间】:2019-11-20 10:24:32
【问题描述】:
我得到了一个字符串,我需要显示可以一次删除一个字母形成的所有字符串。 例如,对于“abbc”,我应该显示“bbc” “ABC” “ABC” 和“abb” 这是我的代码:
int main()
{
char s[41]="abbc",*p;
int n=strlen(s);
p=s;
int i=0;
while(i<n)
{
strcpy(p+i,p+i+1);
cout<<p<<" ";
i++;
strcpy(p,s);
}
return 0;
}
它一直显示 bbc bc bc bc 好像strcpy(p,s); 没有写。为什么我不能在循环中给pointer p 赋值?
【问题讨论】:
-
这不是
C++。除了一行(cout<<p<<" ";)之外,这是纯粹的C。 Link for your teacher. -
p 和 s 指向同一个内存,所以在第一个循环之后 n 不再有效..不知道为什么你会期待不同的东西?
-
你实际上并没有复制
s。p只是指向同一个原始字符串,所以对p的所有操作都会修改s。您想要制作字符串的实际(深层)副本。 -
这能回答你的问题吗? Make a copy of a char*
标签: c++ loops pointers c-strings