c中的结束字符*向量

c中的结束字符*向量,c,C,如何用“\0”标记char*向量的结尾以null终止它? 如果我有char*vector: char* param[5]; 我也想到了 param[4] = '\0'; 或 但它们似乎都不起作用 param是一个字符指针向量,应该指向5个字符串(字符向量)。好的,您正在尝试结束一个字符串向量,类似于作为argv传递给main的内容。在这种情况下,您只需要分配一个空指针: param[4] = 0; 好的,您正在尝试结束字符串向量,类似于作为argv传递给main的内容。在这种情况下,您

如何用“\0”标记char*向量的结尾以null终止它? 如果我有char*vector:

 char* param[5];
我也想到了

 param[4] = '\0';

但它们似乎都不起作用


param是一个字符指针向量,应该指向5个字符串(字符向量)。

好的,您正在尝试结束一个字符串向量,类似于作为
argv
传递给
main
的内容。在这种情况下,您只需要分配一个空指针:

param[4] = 0;

好的,您正在尝试结束字符串向量,类似于作为
argv
传递给
main
的内容。在这种情况下,您只需要分配一个空指针:

param[4] = 0;

char*
向量是指向char的指针向量。您可能需要一个char向量。在这种情况下,您可以写:

char vect[5] = { '\0' };
通过这种方式,向量用所有
'\0'
字符初始化

如果您确实想要一个字符指针数组,您可以执行类似的操作:

char* vect[5] = { NULL };

所有指向字符串的指针都将初始化为
NULL
A
char*
向量是指向char的指针向量。您可能需要一个char向量。在这种情况下,您可以写:

char vect[5] = { '\0' };
通过这种方式,向量用所有
'\0'
字符初始化

如果您确实想要一个字符指针数组,您可以执行类似的操作:

char* vect[5] = { NULL };

所有指向字符串的指针都将初始化为
NULL

如果您确实有一个
char*
数组,您可以执行以下操作:

 param[4] = "";
(只要不需要
param[4]
c
超出范围时有效,第二种方法就应该有效。)

更好的sentinel值通常是空指针,但是:

 param[4] = NULL;

如果您确实有一个
char*
数组,则可以执行以下操作:

 param[4] = "";
(只要不需要
param[4]
c
超出范围时有效,第二种方法就应该有效。)

更好的sentinel值通常是空指针,但是:

 param[4] = NULL;

我可能会这样写:

#include <stdio.h>

int main(){

    char* param[5] = {"1", "2", "3", "4", NULL};

    int i = 0;
    for (i = 0; param[i] ; i++){
       printf("%s\n", param[i]);
    }
#包括
int main(){
char*param[5]={“1”、“2”、“3”、“4”,NULL};
int i=0;
对于(i=0;参数[i];i++){
printf(“%s\n”,参数[i]);
}
}

我可以使用0或“\0”来代替NULL,因为它们最终都是相同的(数值0),但我相信使用NULL宏捕获最符合目的


您还可以编写
param[4]=NULL如果是在初始化之后完成的,并且您
param[4]='\0'
应该可以工作(但看起来更像是模糊处理,因为您根本不需要字符,而是空指针)

我可能会编写如下内容:

#include <stdio.h>

int main(){

    char* param[5] = {"1", "2", "3", "4", NULL};

    int i = 0;
    for (i = 0; param[i] ; i++){
       printf("%s\n", param[i]);
    }
#包括
int main(){
char*param[5]={“1”、“2”、“3”、“4”,NULL};
int i=0;
对于(i=0;参数[i];i++){
printf(“%s\n”,参数[i]);
}
}

我可以使用0或“\0”来代替NULL,因为它们最终都是相同的(数值0),但我相信使用NULL宏捕获最符合目的

您还可以编写
param[4]=NULL如果是在初始化之后完成的,并且您
param[4]='\0'应该可以工作(但看起来更像是模糊处理,因为您根本不需要字符,而是空指针)

char* param[5];
向量不能“以null结尾”-它是字符指针的向量。您只能使用null终止字符数组(将
'\0'
放在您要终止字符数组的任何位置)

因此,我想你的问题的正确答案应该是:你的问题无法回答,因为它基于不正确的假设。:-

你的

char* param[5];
向量不能“以null结尾”-它是字符指针的向量。您只能使用null终止字符数组(将
'\0'
放在您要终止字符数组的任何位置)


因此,我想你的问题的正确答案是:你的问题无法回答,因为它基于不正确的假设。:-

你所说的“保护向量”是什么意思?char*param[5]={“一”、“二”、“三”、“四”、“五个字符串”};这不是一个向量(STL的std::vector),而是一个数组。你所说的“保护向量”是什么意思;这不是一个向量(STL的std::vector),而是一个数组。所以“\0”在这种情况下不起作用,因为它描述的是值,而不是地址???令人惊讶的是,
param[4]=“\0”
;也应该有效(即使意图混淆),但OP表示无效。@Rotor在机器级别上,
'\0'
相当于
0
。但是,对于(至少某些)编译器,前者是
char
值,而不是合法的指针值。当然,您可以将它转换为指针
(char*)'\0'
-这在技术上是可行的,但比普通的
0
@Péter更难看和复杂:
'\0'
是一个字符常量,在C中具有类型
int
,而不是
char
(至少一些)编译器“,在本例中是指“C++编译器”,而问题是关于C的,是的,像argv。所以“\0”在这种情况下不起作用,因为它描述的是值,而不是地址???令人惊讶的是,
param[4]=“\0”
;也应该有效(即使意图混淆),但OP表示无效。@Rotor在机器级别上,
'\0'
相当于
0
。但是,对于(至少某些)编译器,前者是
char
值,而不是合法的指针值。当然,您可以将它转换为指针
(char*)'\0'
-这在技术上是可行的,但比普通的
0
@Péter更难看和复杂:
'\0'
是一个字符常量,在C中具有类型
int
,而不是
char
(至少一些)编译器“,在本例中是指“C++编译器”,而问题是关于C。