在C中复制字符串数组

时间:2017-04-20 04:28:36

标签: c arrays pointers memcpy strcpy

我正在制作一个程序,根据一些规则对一些输入词进行排序。

要对齐它们,我想通过使用memcpy将“单词”复制到“tmp”并更改“tmp”。

我试图将tmp声明为双指针或数组,但我唯一遇到的是分段错误。

我怎么能复制所有“单词”?

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_WORD_LEN 30

int getInput(char*** words) {
  int count;
  int i;
  char buffer[MAX_WORD_LEN+1];

  printf("Enter the number of words: ");
  scanf("%d", &count);
  *words = malloc(count * sizeof(char*));
  printf("Enter the words: ");
  for (i = 0; i < count; i++) {
    (*words)[i] = malloc((MAX_WORD_LEN + 1) * sizeof(char));
    scanf("%s", buffer);
    strcpy((*words)[i], buffer);
  }
  return count;
}

void solve() {
  int count;
  int i;
  char ** words;
  count = getInput(&words);

  char ** tmp = malloc(count* sizeof(char*));
  memcpy(tmp, words, sizeof(char *));
}

void main() {
  solve();
  return;
}

2 个答案:

答案 0 :(得分:0)

您首先创建了一个指针数组,然后为每个新单词调用malloc。

for (i = 0; i < count; i++) {
    (*words)[i] = malloc((MAX_WORD_LEN + 1) * sizeof(char));
    scanf("%s", buffer);
    strcpy((*words)[i], buffer);
  }

(你可以使用缓冲区直接扫描到单词)

请注意,所有这些段的内存分配都是连续的。

如果要复制所有单词,则必须对tmp执行相同的操作。

 char ** tmp = malloc(count * sizeof(char*));
  for (i = 0; i < count; i++) {
    tmp[i] = malloc((MAX_WORD_LEN + 1) * sizeof(char));
    memcpy(tmp[i], words[i], sizeof(MAX_WORD_LEN + 1));
  }

答案 1 :(得分:0)

在函数memcpy(tmp, words, sizeof(char *));内部,您没有递增指针以便将下一个字符串存储在内存中:

for(i=0; i<count; i++) memcpy(&tmp[i], &words[i], sizeof(char *));

这里你没有递增指针来存储下一个字符串。

您需要做的是:
// your values var something = "something"; var row = "RowValue"; // store its to dictionary Dictionary<object, object> myDict = new Dictionary<object, object>(); myDict.Add(something, row); // and find value by key var value = myDict["something"]; //value = "RowValue"