C 和 strcpy 中的字符串指针数组
String pointer array in C and strcpy
#define null "null" //its declared on top
int hash_size=100;
char *hash_table[hash_size];
int i;
for(i=0;i<hash_size;i++){
strcpy(hash_table[i],null);// it doesn't works. WHY!
//hash_table[i]=null; it works
}
我创建了一个字符串指针数组。我想用 "null" 分配所有元素。但是 strcpy 函数不起作用。为什么?
hash_table
是一个指针数组,但您尚未将它们初始化为指向任何地方。您尚未初始化指针数组中的指针。
你可以说
hash_table[i] = null;
这会奏效。
您可以按照以下方式进行
#define null "null" //its declared on top
int hash_size=100;
char *hash_table[hash_size];
int i;
char *p = null;
for(i=0;i<hash_size;i++){
hash_table[i] = p;
}
在这种情况下,hash_table 的所有元素将指向相同的字符串文字 "null"
。
您不能复制字符串文字,因为 1) 数组的元素未初始化,并且 2) 没有指向足够大的内存范围来存储字符串文字的副本。
您只创建了一个数组指针。但是这些指针不指向任何有效的内存——它们是未初始化的。这是undefined behaviour。
宏null
也没什么意义。如果你想将指针初始化为 NULL 指针,那么你可以简单地做:
char *hash_table[hash_size] = {0};
或者如果你真的希望每个指针都指向字符串文字 "null"
那么你可以分配它:
for(i=0;i<hash_size;i++){
hash_table[i]=null;
}
赋值有效,因为数组中的每个指针都简单地指向字符串文字并指向 相同的 字符串文字。
如果你想修改指针指向的内存那么你需要分配内存:
for(i=0;i<hash_size;i++){
hash_table[i] = malloc(sizeof("null"));
if (hash_table[i]) {
*/ error */
}
strcpy(hash_table[i],null);
}
和 free()
完成后类似循环中的指针。
#define null "null" //its declared on top
int hash_size=100;
char *hash_table[hash_size];
int i;
for(i=0;i<hash_size;i++){
strcpy(hash_table[i],null);// it doesn't works. WHY!
//hash_table[i]=null; it works
}
我创建了一个字符串指针数组。我想用 "null" 分配所有元素。但是 strcpy 函数不起作用。为什么?
hash_table
是一个指针数组,但您尚未将它们初始化为指向任何地方。您尚未初始化指针数组中的指针。
你可以说
hash_table[i] = null;
这会奏效。
您可以按照以下方式进行
#define null "null" //its declared on top
int hash_size=100;
char *hash_table[hash_size];
int i;
char *p = null;
for(i=0;i<hash_size;i++){
hash_table[i] = p;
}
在这种情况下,hash_table 的所有元素将指向相同的字符串文字 "null"
。
您不能复制字符串文字,因为 1) 数组的元素未初始化,并且 2) 没有指向足够大的内存范围来存储字符串文字的副本。
您只创建了一个数组指针。但是这些指针不指向任何有效的内存——它们是未初始化的。这是undefined behaviour。
宏null
也没什么意义。如果你想将指针初始化为 NULL 指针,那么你可以简单地做:
char *hash_table[hash_size] = {0};
或者如果你真的希望每个指针都指向字符串文字 "null"
那么你可以分配它:
for(i=0;i<hash_size;i++){
hash_table[i]=null;
}
赋值有效,因为数组中的每个指针都简单地指向字符串文字并指向 相同的 字符串文字。
如果你想修改指针指向的内存那么你需要分配内存:
for(i=0;i<hash_size;i++){
hash_table[i] = malloc(sizeof("null"));
if (hash_table[i]) {
*/ error */
}
strcpy(hash_table[i],null);
}
和 free()
完成后类似循环中的指针。