【发布时间】:2015-09-02 16:39:43
【问题描述】:
自从我不得不处理 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]);
}
目前不打印单词,只会打印第一个字母。任何关于我可能在哪里搞砸的提示都会令人难以置信。谢谢!
【问题讨论】:
-
这一行:
typedef char Word[ WORD_LEN + 1 ];可能是错误的。您似乎试图生成的是一个二维(二维)字符数组),因此您可以使用:typedef char Word;然后在源代码中:Word wordlist[WORD_LEN+1][MAX_WORDS]; -
@user3629249: "
typedef char Word[ WORD_LEN + 1 ];是为char数组创建别名的合法语法" -
@alk,但不是指向字符数组的指针数组的合法语法。
-
好吧,我明白你的想法是什么...... @user3629249 但是这个“
typedef char Word; Word wordlist[WORD_LEN+1][MAX_WORDS];”也确实not定义了一个“指向字符数组的指针数组"m 但正是 OP 当前拥有的,如wordList。 -
关于这两行:
*wordList[ 0 ] = malloc ( sizeof( char ) * ( strlen( message ) + 1 ) ); *wordList[ 0 ] = *message;1) *wordList[0] 将第一个条目视为有效指针,但它实际上是一个简单的字符数组。 2) 表达式sizeof(char)定义为 1,因此对传递给 malloc 的参数绝对没有影响,并且确实使代码混乱。建议删除该表达式。 3) 始终检查 (!=NULL) malloc 的返回值以确保操作成功
标签: c