【问题标题】:String pointer array in C and strcpyC和strcpy中的字符串指针数组
【发布时间】:2016-03-16 14:00:56
【问题描述】:
#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 函数不起作用。为什么?

【问题讨论】:

  • #define null "null" 这是什么鬼?
  • 分配在哪里?
  • 谢谢。我改变我的问题。我想制作一个这样的字符串数组: hash_table[0]-->"sunday" hash_table[1]-->"monday" 如何制作?

标签: c arrays string pointers strcpy


【解决方案1】:

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

你可以说

hash_table[i] = null;

这将起作用。

【讨论】:

    【解决方案2】:

    你可以这样做

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

    【讨论】:

      【解决方案3】:

      您只创建了一个数组指针。但是这些指针并不指向任何有效的内存——它们是未初始化的。这是undefined behaviour

      null 也没有多大意义。如果你想将指针初始化为 NULL 指针,那么你可以简单地这样做:

      char *hash_table[hash_size] = {0}; 
      

      或者如果您真的希望每个指针都指向字符串文字 "null",那么您可以分配它:

      for(i=0;i<hash_size;i++){
          hash_table[i]=null;
      }
      

      赋值之所以有效,是因为数组中的每个指针都只是指向字符串文字,并且也指向 same 字符串文字。

      如果您希望能够修改指针指向的内存,那么您需要分配内存:

      for(i=0;i<hash_size;i++){
          hash_table[i] = malloc(sizeof("null"));
          if (hash_table[i]) { 
             */ error */
          }
          strcpy(hash_table[i],null);
      }
      

      完成后,free() 的指针会在类似的循环中。

      【讨论】:

        猜你喜欢
        • 2018-05-08
        • 2020-03-27
        • 1970-01-01
        • 2021-06-28
        • 1970-01-01
        • 2020-11-21
        • 2014-08-06
        • 2011-04-23
        • 2012-02-08
        相关资源
        最近更新 更多