使用字符串数组填充堆(malloc)

use*_*466 1 c heap

我正在尝试使用字符串数组填充堆,但是当我编译时控制台没有给我任何东西.我不知道我做错了什么......

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)

Bob*_*toe 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);
}
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)