How to change the actual argument passed to a function in C?

前端 未结 4 1803
没有蜡笔的小新
没有蜡笔的小新 2020-12-22 13:15

I want to change the actual argument passed to a function and not a copy of it. For example:

char str[] = \"This is a string\";

I want to c

相关标签:
4条回答
  • 2020-12-22 13:27

    Pass a char* if you want to modify the actual string:

    foo(str);
    ...
    void foo(char *some_string) {
       some_string[0] = 'A';
    }
    

    str will now hold "Ahis is a string"


    If instead of str being an array, you had: char *str = "Hello";, and wanted to modify where str pointed, then you would pass a char**:

    bar(&str);
    ...
    void bar(char **ptr_string) {
       *ptr_string = "Bye";
    }
    

    str will now point to "Bye".

    0 讨论(0)
  • 2020-12-22 13:39

    You may pass char*. The pointer will be copied, but it will still point to the same string

    If you need the pointer itself to be passed (not its copy) you should pass a char**

    0 讨论(0)
  • 2020-12-22 13:41

    I think you mean something like this:

    void update_string(char ** ptr)
    {
        *ptr = strdup("This is a test");
        return;
    }
    

    Then call the function like this:

    char * str = strdup("hello world\n");
    printf("%s\n", str);
    update_string(&str);
    printf("%s\n", str);
    
    0 讨论(0)
  • 2020-12-22 13:43

    To change a string passed to a function in-place, use a regular pointer. For example:

    void lower_first_char(char *str)
    {
        *str = tolower(*str);
    }
    

    After this function executes, the first character of the passed string will be changed to lowercase.

    0 讨论(0)
提交回复
热议问题