我正在尝试使用字符串数组填充堆,但是当我编译时控制台没有给我任何东西.我不知道我做错了什么......
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);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用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);
}
Run Code Online (Sandbox Code Playgroud)
换句话说,换句话说,你的第二个循环本质上是试图将一个越来越小的字符串复制到tempArticle缓冲区中,直到你最终将空字符串复制到其中.
(小问题,另一个回答者指出你的第二个循环是一个无限循环,因为i没有增加.但是,你仍然有提到的其他问题)
编辑
所以回答将其转换为小写的评论.通常,要将整个字符串转换为小写,您只需执行以下操作:
char s[] = "THE String.";
char *c;
for(c = s; *c != '\0'; c++)
*c = (char)tolower(*c);
Run Code Online (Sandbox Code Playgroud)