#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;
}
输出是 极客问答. 谁能帮我了解一下代码是如何一步步工作的?谢谢你的帮助。
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
char *str = "geeksforgeeks";
字符串的类型是 const char *
因此,除非你使用的是C++11之前的标准,否则是不允许的(https:/en.cppreference.comwcpplanguagestring_literal。)
strcpy(fun(), str);
在我看来,它看起来很模糊,也很危险,但它调用了一个函数,这个函数返回一个静态数组的初始位置的指针,而这个静态数组就是要复制的C字符串的目的地。
strcpy(str, "geeksquiz");
将一个字符串文字复制到一个由 func()
. 当使用 strcpy
:
目的地指向的数组的大小应足够长,以包含与源相同的C字符串(包括终止符null),并且不应在内存中与源重叠。
此外,请看一下。为什么 "使用命名空间std; "被认为是不好的做法?