因为我不得不处理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]);
}
目前单词不打印,只会打印第一个字母。关于我可能搞砸的任何提示都会令人难以置信。谢谢!
答案 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并添加要复制的字符数的第三个参数外,所有代码看起来都是一样的。