【问题标题】:Assign the values of an array to a pointer将数组的值分配给指针
【发布时间】:2015-07-05 19:36:26
【问题描述】:

我首先连接辅助char 数组中的一系列元素,然后将连接的数组分配给指针。将此char 数组分配给指针时出现问题,它会产生分段错误。

我的方法如下:

char aux_name [12];
char * name = (char *) malloc(sizeof(char)*13);
int i;

for(i = 0; i < 5; i++){
    sprintf(aux_name, "id_%i", i);
    *name = (void *) (intptr_t) aux_name; //Conflict line

   //Do something with variable name (it is required a pointer)

}

【问题讨论】:

  • 标准警告:请do not cast malloc()C 中的家人的返回值。
  • 旁注:执行完全相同的任务 5 次有什么意义???

标签: c arrays pointers char segmentation-fault


【解决方案1】:

您不分配指针值给已经malloc()-ed 的指针,您将在那里面对memory-leak。你必须使用strcpy() 来实现你想要的。

OTOH,如果你不动态分配内存,那么你可以像这样分配指针

name = aux_name;

也就是说,

我首先在一个辅助字符数组中连接一系列元素

好吧,你不是。您只是在每次迭代中每次都覆盖数组。你需要做的是

  1. 每次收集sprintf()的返回值。
  2. 下一次迭代,将指向缓冲区的指针前进那么多位置,以便在前一个输入之后连接新输入。

注意/建议:

  1. do not castmalloc()C中的family的返回值。

  2. sizeof(char) 在 c 标准中保证为 1。您不需要使用它,只需删除该部分即可。

【讨论】:

  • 关于sizeof(char) 的评论是主观的。有些人认为它应该使所有 malloc 调用保持一致。使用与否是个人喜好,没有对错之分(不像 malloc 的结果,这总是不好/多余的)。
  • @Lundin 先生,您说的非常对。但正如不投射malloc() 结果[It makes you repeat yourself, which is generally bad. 部分] 背后的逻辑之一,我们可以建议不要使用sizeof(char),不是吗?但是,我更新了我的评论。希望现在没事。 :-)
【解决方案2】:

你不能这样做,你也不需要这样做,这会起作用

size_t nonConstanSizeInBytes = 14;
char *name = malloc(nonConstanSizeInBytes);

snprintf(name, 13, "id_%i", i);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多