从列表中打印char数组

时间:2015-09-02 16:39:44

标签: c

因为我不得不处理C指针已经有一段时间了,而且我在项目上遇到了麻烦。这是我为突出问题而做的一些示例代码。我只需要能够在“wordList”中添加字符串,并能够在以后检索它们。

// This typedef is in the header file
// typedef char Word[ WORD_LEN + 1 ];

Word wordList[ MAX_WORDS ];

int main () {
  Word message = "HEllO";
  Word message2 = "OHHO";

  *wordList[ 0 ] = malloc ( sizeof( char ) * ( strlen( message ) + 1 ) );
  *wordList[ 0 ] = *message;

  *wordList[ 1 ] = malloc ( sizeof( char ) * ( strlen( message2 ) + 1 ) );
  *wordList[ 1 ] = *message2;

  printf( "%s\n", &wordList[0]);
  printf( "%s\n", &wordList[1]);
}

目前单词不打印,只会打印第一个字母。关于我可能搞砸的任何提示都会令人难以置信。谢谢!

4 个答案:

答案 0 :(得分:4)

Use good ol' strcpy,不需要玩指针。

Word message = "HEllO";
strcpy(wordList[0], message);

printf("%s\n", wordList[0]);

甚至strncpy正如@alk所指出的那样

strncpy(wordList[0], message, sizeof(wordList[0]) - 1);
wordList[0][WORD_LEN] = '\0'; 

答案 1 :(得分:1)

wordList是一个C - "字符串" s的数组。所以像这样使用它们:

Word message = "HEllO";

size_t size_max = sizeof wordList[0] - 1;

strncpy(wordList[0], message, size_max);
wordList[0][size_max] = '\0';

答案 2 :(得分:0)

由于Word已经是typedef' d作为char数组(C字符串),因此无需使用malloc在数组中分配内存。本质上,wordList是一个数组数组,您只需将字符串(Words)的内容复制到所需的索引中即可。请参阅以下代码以了解正常工作。

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

// some magic numbers
#define WORD_LEN 50
#define MAX_WORDS 20

typedef char Word[ WORD_LEN + 1 ];
Word wordList[ MAX_WORDS ];

int main () {
    Word message = "HEllO";
    Word message2 = "OHHO";

    //wordList[ 0 ] = malloc ( sizeof( char ) * ( strlen( message ) + 1 ) );
    //*wordList[ 0 ] = *message;
    strncpy(wordList[0], message, sizeof(Word));

    //wordList[ 1 ] = malloc ( sizeof( char ) * ( strlen( message2 ) + 1 ) );
    //*wordList[ 1 ] = *message2;
    strncpy(wordList[1], message2, sizeof(Word));

    printf( "%s\n", wordList[0]);
    printf( "%s\n", wordList[1]);
}

答案 3 :(得分:0)

现在wordList是一个Word数组,每个单词都是一个字符数组。当您定义Word wordList[ MAX_WORDS ] MAX_WORDS的空间大小为WORD_LEN + 1的字数已经在全局部分中分配时,因此您不需要为此更多地使用malloc。

要将消息插入单词,您将使用strcpy(http://www.cplusplus.com/reference/cstring/strcpy/)而不是mallocing space并分配消息。因此,将消息插入wordList [0]看起来像strcpy( wordList[0], message)。 Strcpy接收两个char *,第一个是副本的目标,第二个是源。

以下是您应该尝试做的一些示例代码:

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

typedef char Word[ 10 ];
Word wordList[ 10 ];
int main(){
    Word message = "Hello";
    strcpy( wordList[0], message);
    printf("%s", wordList[0]);
    return 0;
}

**为了更安全,您可以使用strncpy(http://www.cplusplus.com/reference/cstring/strncpy/)而不是strcpy。您可以在此处指定要作为参数复制的字符数。除了将strcpy更改为strncpy并添加要复制的字符数的第三个参数外,所有代码看起来都是一样的。