다음 코드 조각에 문제가 있습니다. 문제는 단순히 동적으로 할당 된 char * 배열의 값이 행 번호 24에서 행 번호 28로 변경되어서 숫자를 변경할 수 없다는 것입니다. 밖으로 왜C++ 동적 할당 char *
코드 :
#include <iostream>
#include <string>
#include <stdlib.h>
#include <ctype.h>
#include <cstring>
using namespace std;
int main() {
string x = "5+90-88n";
unsigned int i =0, k=0, argc=0;
char** argv = new char*[x.length()];
while (i < x.length()) {
if (isdigit(x[i])) {
k=0;
while (isdigit(x[i+k])) {k++;}
argv[argc] = (char*)x.substr(i,k).c_str();
i+=k;
} else {
argv[argc] = (char*)x.substr(i,1).c_str();
i++;
}
cout << argc <<" "<< argv[argc] <<endl;
argc++;
}
cout << " ------ \n";
for (unsigned int kk =0; kk<argc; kk++) {
cout << kk << " " << argv[kk] << endl;
}
return 0;
}
출력 :
0 5
1 +
2 90
3 -
4 88
5 n
------
0 n
1 n
2 n
3 n
4 n
5 n
심지어 약간의 실수가 같은 의미없는 것, 동일로 상부 및 하부 부품을 기다리고 있었다 나는 알았지 않거나 동적 할당을 사용하는 것에 대해 모르는 뭔가가 있습니다.
왜 char * 배열을 사용하고 있습니까? 문자열의 벡터를 사용하십시오. –
벡터가 더 뛰어나다는 것을 알고 있지만 이것은 할당의 일부이기 때문에 할당에서 사용하는 것이 확실치 않습니다. 그러나 위의 부분은 주된 문제를 일으킬 것입니다. –
* 포인터 *에는 메모리를 할당하지만 문자열에는 할당하지 않습니다. –