这段代码是如何工作的?关于指针、字符串字元

问题描述 投票:0回答:1
#include <bits/stdc++.h>
using namespace std;

char *fun()
{
    static char arr[1024];
    return arr;
}

int main()
{
    char *str = "geeksforgeeks";
    strcpy(fun(), str);
    str = fun();
    strcpy(str, "geeksquiz");
    cout << fun();
    return 0;
}

输出是 极客问答. 谁能帮我了解一下代码是如何一步步工作的?谢谢你的帮助。

c++
1个回答
0
投票
static char arr[1024]; // << word static here means that every time fun() returns pointer to the same memory.

str = fun(); // now str points to that memory. 
strcpy(str, "geeksquiz"); // copies string into that memory

0
投票

char *str = "geeksforgeeks";

字符串的类型是 const char *因此,除非你使用的是C++11之前的标准,否则是不允许的(https:/en.cppreference.comwcpplanguagestring_literal。)

strcpy(fun(), str);

在我看来,它看起来很模糊,也很危险,但它调用了一个函数,这个函数返回一个静态数组的初始位置的指针,而这个静态数组就是要复制的C字符串的目的地。

strcpy(str, "geeksquiz");

将一个字符串文字复制到一个由 func(). 当使用 strcpy:

目的地指向的数组的大小应足够长,以包含与源相同的C字符串(包括终止符null),并且不应在内存中与源重叠。

此外,请看一下。为什么 "使用命名空间std; "被认为是不好的做法?

© www.soinside.com 2019 - 2024. All rights reserved.