将字符串从一个结构复制到另一个结构

时间:2015-04-19 01:57:18

标签: c arrays string structure

我正在尝试编写一个按字母顺序排序小字典的程序。为此,我需要能够将未排序字典中的字符串复制到排序字典。如果我尝试复制整个字符串:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>

struct entry
{
    char word[15];
    char definition[50];
};


void dictionarySort(struct entry dictionary[]) {
    int i;

    struct entry dictionary2[100] = {{}};

    for (i = 0; i <= strlen(&dictionary->word[0]); i++) {
        dictionary2[0].word[i] = dictionary[0].word[i];

    }
    dictionary2[0].word = dictionary[0].word;

    printf("%s\n",dictionary2[0].word);

}

int main (void) {
    struct entry dictionary[100] = 
    {{"aerie", "a high nest"},
    {"abyss", "a bottomless pit"},
    {"ahoy", "a nautical call of greeting"},
    {"addle", "to become confused"},
    {"aardvark", "a burrowing African mammal"},
    {"agar", "a jelly made of seaweed"},
    {"acumen", "mentally sharp; keen"},
    {"aigrette", "an ornamental cluster of feathers"},
    {"affix", "to attach"},
    {"ajar", "partially opened"}};
    dictionarySort(dictionary);
}

我收到以下错误消息:

error: array type 'char [15]' is not assignable
        dictionary2[0].word = dictionary[0].word;
        ~~~~~~~~~~~~~~~~~~~ ^

另一方面,如果我复制单个字符,我无法区分字符串,这在访问dictionary2时是必需的。

5 个答案:

答案 0 :(得分:2)

由于您的编译器告诉您数组不能在c中分配,要复制字符串,您需要strcpy()函数

strcpy(dictionary2[0].word[i], dictionary[0].word[i]);

您需要确保目标数组有足够的空间来容纳字符串,即+1终结符的字符串nul中的字符数。

答案 1 :(得分:1)

您可能需要考虑使用qsort(如果您有linux / mac类型man qsort以获取更多信息)

qsort调用看起来像qsort(dictionary,size_of_arr, sizeof(entry), func_name);你必须创建一个名为func_name的比较函数(尽管你可以随意调用它,只要你在函数调用中正确传递它。

int func_name(void *ent1, void *ent2)
{
    struct entry a = *(struct entry*)ent1, b = *(struct entry*)ent2;
    return strcmp(a.word, b.word);
}

我认为如果没有接近它的话会有用......

答案 2 :(得分:0)

你需要使用一个函数来分配字符串(字符数组)

这样做的常用功能是:

char a[15];
strcpy( a , "ameer" ); % copying second string to first one
来自库的

意味着a =“ameer”;

所以在你的情况下你可以写:

strcpy( dictionary2[0].word , dictionary[0].word );

答案 3 :(得分:0)

dictionary2[0].word[i] = dictionary[0].word[i];是完全错误的。您不能像处理int类型那样将一个数组复制到另一个数组作为赋值操作。

您可以使用strcpy(或strncpy)将字节从一个数组复制到另一个数组中。或者使用memcpy。

strcpy(dictionary2[0].word[i], dictionary[0].word[i]); 



memcpy(dictionary2[0].word[i],
dictionary[0].word[i],sizeof(dictionary[0].word));

答案 4 :(得分:-1)

您要做的是使用赋值运算符'='完全复制1个字符串。您可以在for循环中执行此操作,也可以使用strcpy()。