char*p=str,*q=0; int i=0; while(p[i]!='\0') { if(p[i]>='0'&&p[i]<='9') { *q=p[i]; q++; } i++; } cout<<q;修改一下
时间: 2024-03-12 13:48:37 浏览: 71
VC (CString,char,int,long,string,byte...)名种类形间的转换
4星 · 用户满意度95%
这段代码中存在悬挂指针的问题,因为指针q没有被初始化,所以在对其进行赋值操作时会导致未知的行为。另外,最后输出的是指针q的值,而不是指针所指向的字符串。以下是修改后的代码:
```c++
char* p = str;
char* q = new char[strlen(str) + 1]; // 为指针q分配内存
int i = 0;
while (p[i] != '\0') {
if (p[i] >= '0' && p[i] <= '9') {
*q = p[i];
q++;
}
i++;
}
*q = '\0'; // 添加字符串结束符
cout << q - strlen(q); // 输出指针所指向的字符串
delete[] q; // 释放指针q所占用的内存
```
修改后的代码中,我们为指针q分配了内存,避免了悬挂指针的问题。同时,在输出指针所指向的字符串时,我们先计算出字符串的长度,再通过指针的减法操作得到字符串的起始地址,最后输出该地址即可。最后,要记得释放指针q所占用的内存。
阅读全文