gpt4 book ai didi

c - 显式忽略 NULL 值,但 C 的行为很奇怪

转载 作者:行者123 更新时间:2023-11-30 16:35:38 25 4
gpt4 key购买 nike

我正在编写一个程序来检查字符串中的某个单词。我使用 strtok 来分割字符串并将其存储在数组中。这没有问题。

当我尝试检查某个索引处的 wordArray 的值并说如果它不为 NULL,则保存到变量中,如果它为 NULL,则不执行任何操作时,问题就出现了。然而,它并没有忽略 NULL。

我的代码如下:

// This is a string to consider
char line[] = "I am here";
// Array of pointers to later hold pointers to each word
char *wordArray[MAX_LINE_LEN];

// Below is the chopping function, this is working well
// First chop up the first word, using the original string
wordArray[0] = strtok(line, " ");
int i = 0;

// Then loop to chop up and save into wordArray
while(wordArray[i] != NULL){
i++;
wordArray[i] = strtok(NULL, " ");
}
// Print out the words in wordArray
for (int j = 0; j < i; j++) {
printf("Word at index %d in wordArray is: %s \n",j, wordArray[j]);
}

// This is a part I don't get

// First define a character array/pointer so that it's the same type with wordArray
char *word = "a word";
int i = 0;

// Check wordArray at a certain key, if not null, save the value into word variable
if (wordArray[i] != NULL) {
word = wordArray[i];
}
printf("Word is: %s \n", word);

当 i = 0 时:

Word is: I

当我=2时:

Word is: here

当 i = 3 时(此时它正在做正确的事情 - 忽略 if 语句):

Word is: a word

当我 >= 4 时:

Word is:  

什么也没有打印出来。它的问题到底是什么?我该如何解决?

更新:感谢所有的帮助!问题是 wordArray 尚未使用 NULL 值进行初始化。这是我添加的内容:

for (int i = 0; i < MAX_LINE_LEN; i++) {
wordArray[i] = NULL;
}

这是一个指针数组,因此我使用了 NULL,但对于字符数组,它可能更喜欢 wordArray[i] = '\0',因为 '\0' code> 是一个空字符数组。

最佳答案

// Array of pointers to later hold pointers to each word
char *wordArray[MAX_LINE_LEN];

wordArray 最初未分配 null。

// Then loop to chop up and save into wordArray
while(wordArray[i] != NULL){
i++;
wordArray[i] = strtok(NULL, " ");
}

当 i 的值达到 4 时,上述循环将终止。因此,wordArray[4] 未初始化。因为,wordArray 来自堆栈并且您没有初始化它的值可以是任何东西。所以,下面的条件不会失败。

if (wordArray[i] != NULL) {
word = wordArray[key];
}

你很幸运,你没有遇到硬错误,因为在这种情况下,单词指向任何随机指针,你将在这里得到未定义的行为。

关于c - 显式忽略 NULL 值,但 C 的行为很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48819270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com