C语言 在其他函数中使用 malloc 更改字符串



当我使用 malloc 时,如何更改其他函数中的字符串?

in main: 
char *myString;
changeString(myString);

changeString(char *myString){
    myString = malloc((size) * sizeof(char));
    myString[1] = 'a';
}

谢谢

C 中的参数按值传递。因此,要修改函数中的变量,您必须将指针传递给它。例如,int *intchar **char *

void changeString(char **myString){
    // free(*myString); // add when myString is allocated using malloc()
    *myString = malloc(2);
    (*myString)[0] = 'a';
    (*myString)[1] = '';
}

在 main 中分配内存,然后将指向已分配内存开始的指针传递给函数。
此外,将包含已分配内存大小的变量传递给函数,以便可以确保新文本不会溢出分配的内存。
修改后的字符串可从 main 获得。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void changeString(char *stringptr, int sz);
int main(void)
{
    const int a_sz = 16;
    /* allocate memory for string & test successful allocation*/
    char *myString = malloc(a_sz);
    if (myString == NULL) {
        printf("Out of memory!n");
        return(1);
    }
    /* put some initial characters into String */
    strcpy(myString, "Nonsense");
    /* print the original */
    printf("Old text: %sn", myString);
    /* call function that will change the string */
    changeString(myString, a_sz);
    /* print out the modified string */
    printf("New text: %sn", myString);
    /* free the memory allocated */
    free(myString);
}
void changeString(char *stringptr, int sz)
{
    /* text to copy into array */
    char *tocopy = "Sense";
    /* only copy text if it fits in allocated memory
       including one byte for a null terminator */
    if (strlen(tocopy) + 1 <= sz) {
        strcpy(stringptr, tocopy);
    }
}

相关内容

  • 没有找到相关文章

最新更新