C和strcpy中的字符串指针数组

时间:2015-12-10 19:36:08

标签: c arrays string pointers 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
}

我创建了一个字符串指针数组。我想用&#34; null&#34;分配所有元素。但strcpy功能不起作用。为什么?

3 个答案:

答案 0 :(得分:1)

hash_table是一个指针数组但是你没有将它们初始化为指向任何地方。您尚未初始化指针数组中的指针。

你可以说

hash_table[i] = null;

这将有效。

答案 1 :(得分:1)

您可以通过以下方式执行此操作

#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)不指向足够大的内存范围来存储字符串文字的副本。

答案 2 :(得分:1)

您只创建了一个数组指针。但是那些指针并没有指向任何有效的内存 - 它们是未初始化的。这是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()一旦完成,就会在类似的循环中指出。