字符数组以双引号传递给函数

时间:2018-08-11 15:15:44

标签: c++ string memcpy

将双引号的字符串作为参数传递给函数时,在幕后会发生什么?该字符串在哪里分配内存?

如果我执行memcpy(ptr, "SINGH", strlen("SINGH")+1);,则输出仅为SINGH。多余的字节从哪里复制?

对于以下程序:

void func(char *ptr) {
    memcpy(ptr, "SINGH", strlen("SINGH"));
    cout << ptr << endl; /* Output is SINGHHELLO */
    /* If I do memcpy(ptr, "SINGH", strlen("SINGH")+1); Output is SINGH only. From where does extra byte is copied from? */
}

int main() {
    char str[11] = "HELLOHELLO";
    char str2[10] = "ABC";
    memcpy(str, "HELLO", strlen("HELLO")); /* Where is memory allocated for string 'HELLO' ? */
    cout << str << endl << str2 << endl;
    func(str);
    return 0;
}

1 个答案:

答案 0 :(得分:-1)

"something"被称为字符串文字,它只是只读存储器中的字符序列(实际上是一个数组)。

当您调用任何需要使用指针类型为char的参数的函数时,此字符串文字(实际上是char数组)的地址将传递给该函数。