Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为什么将%s视为字符。为什么字符串作为指针会有如此不寻常的行为_Arrays_Pointers - Fatal编程技术网

Arrays 为什么将%s视为字符。为什么字符串作为指针会有如此不寻常的行为

Arrays 为什么将%s视为字符。为什么字符串作为指针会有如此不寻常的行为,arrays,pointers,Arrays,Pointers,此代码的输出:- Hello与%s 在此处检查:- //为什么指针字符串会出现这种异常行为 您正在调用未定义的行为 设置arr=”“后引用arr+2是指拾取任意一段内存(在本例中,是一段字符串文字)。当您运行程序时,内存的布局使得常量字符串和%s正好位于常量空字符串之后。内存如下所示: int main() { char *arr="hello"; clrscr(); printf("%s",arr); arr=""; printf("and %s",arr+2); getc

此代码的输出:-

Hello与%s

在此处检查:-


//为什么指针字符串会出现这种异常行为

您正在调用未定义的行为


设置
arr=”“
后引用
arr+2
是指拾取任意一段内存(在本例中,是一段字符串文字)。

当您运行程序时,内存的布局使得常量字符串
和%s
正好位于常量空字符串之后。内存如下所示:

int main()
{

 char *arr="hello";
 clrscr();
 printf("%s",arr);
 arr="";

  printf("and %s",arr+2);
 getch();

 return 0;
}!
将空字符串指定给
a
时,将
a
指向
\0
字符。然后计算a+2,结果指向
n
字符

因此,当您将+2解释为以NUL结尾的字符串时,会得到
nd%s


当然,这是未定义的行为。许多编译器按使用顺序排列常量:此处空字符串位于
和%s
之前。但是,没有什么强迫编译器这样做,如果它以不同的方式布置内存,您将得到不同的结果。程序甚至可能崩溃。

您没有创建指向字符串的指针>。。您在内存空间中创建了一个用于全局变量和常量的块..并使用指针指向该块..您不能更改该值,因为它是常量内存空间的一部分..您所做的是将指针重新分配到另一个内存位置,并希望幸运地指向所需的位置..它不会总是发生

你想做什么???arr+2是一个无效的位置,但为什么这样的无效输出??即使我这样做:arr=“y”也会看到相同的输出,但为什么它总是从printf()中的字符串中获取??。。我的数组arr=”“没有指向printf stringNo的第一个索引('\0'根据u),它指向printf的参数前面的0字节,这将生成一个空字符串。如果添加一个,
a+1
,则得到的地址超过零一个字节,即
a
。如果您添加两个,
a+2
,您将获得
n
的地址。懂
.  .  .  \0  a  n  d  ' '  %  s \0  .  .  .