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之后将其标记为答案