C++ 指针-单个字符串与字符串数组
这是一个关于指向字符串的指针与指向字符串数组的指针(复数)的问题。以下是代码-请参阅有关问题的注释:C++ 指针-单个字符串与字符串数组,c++,pointers,C++,Pointers,这是一个关于指向字符串的指针与指向字符串数组的指针(复数)的问题。以下是代码-请参阅有关问题的注释: int main(int argc, char** argv) { // Here, we're just loading each string into an incrementing pointer and printing as we go. It's not an array of pointers. This works fine. char* dumb = NU
int main(int argc, char** argv) {
// Here, we're just loading each string into an incrementing pointer and printing as we go. It's not an array of pointers. This works fine.
char* dumb = NULL;
cout << argc << endl;
for (int i = 0; i < argc; i++) {
dumb = argv[i];
cout << dumb << endl;
dumb++;
}
// Next we'll try to load the strings into an array of pointers, and print them out. This causes an error (see below).
char** dumber = NULL;
cout << argc << endl;
for (int i = 0; i < argc; i++) {
*(dumber + i) = argv[i];
cout << dumber[i] << endl;
}
return 0
}
int main(int argc,char**argv){
//在这里,我们只是将每个字符串加载到一个递增指针中,并在运行时进行打印。它不是指针数组。这很好。
char*dumb=NULL;
cout指针数组在哪里
char** dumber =NULL;
只是指向“指向字符的指针”的指针,而不是指针数组。
你需要
char** dumber = new char*[argc];
指针数组在哪里
char** dumber =NULL;
只是指向“指向字符的指针”的指针,而不是指针数组。
你需要
char** dumber = new char*[argc];
将此行添加到代码中:
dumber = malloc(100); // adjust the size as per your requirements
由于您没有为“dumber”分配任何空间,因此每次尝试
写入一个新字符串,您将在0x00000000位置写入它,在此写入
位置导致访问冲突,因为不允许在此地址写入进程。
此地址专门为空指针保留。将此行添加到代码中:
dumber = malloc(100); // adjust the size as per your requirements
由于您没有为“dumber”分配任何空间,因此每次尝试
写入一个新字符串,您将在0x00000000位置写入它,在此写入
位置导致访问冲突,因为不允许在此地址写入进程。
这个地址是专门为空指针保留的。这就是我最后得到的地址。我想这可能对其他新手有所帮助
我会发布它。它通过释放分配给dumber数组的内存来完成,我知道这是一件好事
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
// int main(int argc, char** argv) { // An alternative.
// Just loading each string into the same pointer and printing as we go.
// It's not an array of pointers.
char* dumb;
cout << argc << endl;
for (int i = 0; i < argc; i++) {
dumb = argv[i];
cout << dumb << endl;
}
// Next we'll load the strings into an array of pointers, and print them out.
char** dumber = new char* [argc];
cout << argc << endl;
for (int i = 0; i < argc; i++) {
*(dumber + i) = argv[i];
cout << dumber[i] << endl;
}
// Deallocate the memory dynamically assigned by the 'new' operator for the
// pointer array.
delete[] dumber;
dumber = 0;
cin.get();
return 0;
}
#包括
使用名称空间std;
int main(int argc,char*argv[]){
//intmain(intargc,char**argv){//另一种方法。
//只需将每个字符串加载到同一个指针中,然后一边打印即可。
//它不是指针数组。
哑巴;
cout这就是我的结局。也许这会对其他新手有所帮助,所以我想
我会发布它。它通过释放分配给dumber数组的内存来完成,我知道这是一件好事
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
// int main(int argc, char** argv) { // An alternative.
// Just loading each string into the same pointer and printing as we go.
// It's not an array of pointers.
char* dumb;
cout << argc << endl;
for (int i = 0; i < argc; i++) {
dumb = argv[i];
cout << dumb << endl;
}
// Next we'll load the strings into an array of pointers, and print them out.
char** dumber = new char* [argc];
cout << argc << endl;
for (int i = 0; i < argc; i++) {
*(dumber + i) = argv[i];
cout << dumber[i] << endl;
}
// Deallocate the memory dynamically assigned by the 'new' operator for the
// pointer array.
delete[] dumber;
dumber = 0;
cin.get();
return 0;
}
#包括
使用名称空间std;
int main(int argc,char*argv[]){
//intmain(intargc,char**argv){//另一种方法。
//只需将每个字符串加载到同一个指针中,然后一边打印即可。
//它不是指针数组。
哑巴;
您是否正在尝试取消对空指针的引用dumber
。我不知道您希望得到什么样的结果。此代码dumb++;
不起任何作用--您已经在为argv[I]
递增I
,因此将dumb++;
放在末尾对代码没有任何影响(实际上只是递增最后一个argv[I]
指针按1,但您仍然需要重新指定指针)n、 m.我希望你不要粗鲁。我是这方面的初学者!这是一个关于基本概念的问题,但这是一个很好的问题,学习就是这样发生的。你试图去引用一个空指针dumber
。我想知道你期望得到什么样的结果。这段代码dumb++;
没有任何作用——你已经在增加I
对于argv[i]
,因此将dumb++;
放在末尾对您的代码没有影响(它实际上只是将最后一个argv[i]
指针增加1,但您仍然需要重新分配指针)n、 m.我希望你们不要粗鲁。我是这方面的初学者!这是一个关于基本概念的问题,但这是一个很好的问题,学习就是这样发生的。这个问题被标记为“C++”@Abhineet,那又怎么样?malloc()是合法的C++@ChrisStratton::是的,但我认为,新的
会更好。这个问题被标记为“C++”@那又怎样?malloc()是合法的C++@ChrisStratton::是的,但我认为,new
会更好。请不要忘记在@user3885616之前将其标记为答案。请不要忘记在@user3885616之后将其标记为答案