我正在制作一个程序,根据一些规则对一些输入词进行排序。
要对齐它们,我想通过使用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;
}
答案 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"