我正在尝试使用字符串数组填充堆,但是在编译时控制台没有给我任何东西。我不知道我做错了什么......
void spellCheck(char article[], char dictionary[]) {
int i = 0;
char* tempArticle;
while ( article[i] != '\0'){
i++;
}
tempArticle = malloc(i);
i=0;
while (article[i] != '\0'){
strcpy(tempArticle, article[i]);
}
printf("%s", tempArticle);
}
答案 0 :(得分:5)
您可以使用strlen作为字符串长度。此外,您经常使用strcpy。最终,您只复制空终止符。 strcpy函数可以帮到你。 strcpy将每个字符复制到预期的空终止符到新缓冲区中。换句话说,您不能一次复制一个字符,而是一次复制一个字符串。虽然,我不确定你的功能目前是做什么的。
void spellCheck(char article[], char dictionary[]) {
int i = 0;
char* tempArticle;
/*while ( article[i] != '\0'){
i++;
}*/
tempArticle = malloc((strlen(article)+1) * sizeof(char));
/*i=0;
while (article[i] != '\0'){
strcpy(tempArticle, article[i]);
}*/
strcpy(tempArticle, article);
printf("%s", tempArticle);
}
再说一遍,换句话说,你的第二个循环本质上是试图将一个越来越小的字符串复制到tempArticle
缓冲区,直到你最终将空字符串复制到其中。
(小问题,另一个回答者指出你的第二个循环是一个无限循环因为i
没有增加。但是,你还有其他问题提到了)
修改强>
所以回答将其转换为小写的评论。通常,要将整个字符串转换为小写,您只需执行以下操作:
char s[] = "THE String.";
char *c;
for(c = s; *c != '\0'; c++)
*c = (char)tolower(*c);
答案 1 :(得分:2)
strcpy复制整个字符串,而不仅仅是一个字符。 http://cplusplus.com/reference/clibrary/cstring/strcpy/
此外,strlen()返回字符串的长度。你可以通过类似的方式使代码更短更易读:
void spellCheck(char article[], char dictionary[])
{
char *tempArticle = malloc(sizeof(char)*(strlen(article)+1));
strcpy(tempArticle, article);
// deal with tempArticle
free(tempArticle)
}
malloc行中的+1是为了使行尾字符获得空格。
答案 2 :(得分:1)
这个
i=0;
while (article[i] != '\0') {
strcpy(tempArticle, article[i]);
}
是一个无限循环(除非article[0]
碰巧为0)。你需要确定一下。虽然代码中有很多东西需要修复,但这是一个好的开始。
答案 3 :(得分:1)
很多人似乎认为你正在尝试复制一个字符串。主题和你的介绍似乎不是这样的。你确定你不是想做这样的事吗?
void spellCheck(char *article[], char dictionary[]) { int i = 0; char** tempArticle; while (article[i] != NULL) { i++; } tempArticle = malloc(i*sizeof(char*)); i=0; while (article[i] != NULL) { tempArticle[i] = strdup(article[i]); i++; } }
答案 4 :(得分:0)
你没有增加我:
while(article [i]!='\ 0'){ strcpy(tempArticle,article [i]); }
答案 5 :(得分:0)
问题在于:
i = 0;
while (article[i] != '\0') {
strcpy(tempArticle, article[i]);
}
Strcpy复制整个字符串,你忘了增加i,而strcpy期望第二个参数是char指针(不是char)。所以你一遍又一遍地将垃圾复制到tempArticle中。
试试这个:
for (int i=0; article[i] != '\0'; ++i) {
tempArticle[i] = article[i];
}
您的代码中还存在其他设计问题,但这可能是唯一阻止其工作的问题。