【发布时间】:2018-05-09 03:40:45
【问题描述】:
我现在自己更正了程序。
这仍然是-Never-回答的问题:
我有一个二维字符数组,每个数组都包含一个单词。我使用函数将char* 逐字拆分,以将它们放入数组中。我的问题是它不打印单词而是随机字符。可能是指针的问题?我不确定char*[20] 到char[][20] 的转换
因为我想将char*spamArray[20] 过滤成char[][20]
我需要将char*[20] 传递给具有char[][20] 参数的过滤器。
这是电话:
char* spam = "this is a string";
//spam isn't actually initialized this way, but this is just for explaining what it contains
//OLD QUESTION CODE:char (*spamArray)[20] = (char(*)[20])malloc((sizeof(char) * 20) * nSpam);
//new:
char spamArray[nSpam][20];
//nSpam is the number of words
splitstring(spam, &spamArray[0], nSpam);
这是把函数splitstring变成单词
inline void splitstring(char *str, char (*arr)[20], size_t t)
{
size_t i = 0; //index char nella stringa dell'array
while(t != 0)
{
if (*str != ' ' && *str != '\0')
{
(*arr)[i] = *str;
*str++;
i++;
}
else
{
t--;
*str++;
(*arr)[i] = '\0';
*arr++;
i = 0;
}
}
}
然后我会调用一个函数来测试和打印二维数组中的单词(spamArray)
filter_mail(&txt, spamArray) //i call the function this way
void filter_mail(char **line, char spam[][20], int nSpam)
{
char *line_tmp = *line;
bool isSpam = 0;
int a = 0;
int c = 0;
while(nSpam!= 0)
{
if (spam[a][c] != '\0')
{
printf("%c", spam[a][c]);
c++;
}
else
{
a++;
c = 0;
nSpam--;
}
}
}
然后它每次打印随机的东西并且程序崩溃。
另外,我应该如何释放spamArray?
以这种方式释放它是否正确?
free(spamArray)
我现在没有任何答案,因为每个人都指出使用char[][] 不起作用。当然不是。我什至不在源代码中使用它。那只是问题的标题。请在任何其他答案之前阅读所有内容。
【问题讨论】:
-
您的 fix-my-code 问题在这里是题外话。您需要发布minimal reproducible example
-
您的代码非常混乱,正如其他人指出的那样,充满了未定义的行为。您可能已经成功地让编译器接受了某些东西,但这并不意味着它会像您认为的那样远程执行任何操作。
-
版主说明:请进行扩展讨论以进行聊天。评论不是他们的地方。
标签: c pointers multidimensional-array c-strings