当我运行下面的代码时,我的输出不是我所期望的。
我理解它的方式是<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
<!-- right here -->
android:layout_height="100dp"
android:background="@drawable/backgroundgeneral"
android:padding="10dp" <!-- editted -->
android:orientation="vertical" >
指向ptr
数组的第一个元素的地址。我认为Str
应该导致+ {5}元素ptr + 5
。因此,输出应仅显示f
,而不是f
。
为什么显示fg
?是否与fg
如何显示数组有关?
cout
预期输出:#include <iostream>
using namespace std;
int main()
{
char *ptr;
char Str[] = "abcdefg";
ptr = Str;
ptr += 5;
cout << ptr;
return 0;
}
实际输出:f
答案 0 :(得分:6)
宣布:
char Str[] = "abcdefg"
字符串abcdefg
隐式存储有一个额外的字符\0
,用于标记字符串的结尾。
因此,当您cout
char*
时,输出将是char *
点所存储的所有字符以及char*
之后连续内存位置中存储的所有字符直到在其中一个内存位置遇到\0
个字符!由于\0
字符在您的示例中位于g
之后,因此会打印2个字符。
如果您只想打印当前字符,请执行以下操作::
cout << *ptr;
答案 1 :(得分:2)
为什么显示
fg
?
std::cout << char*
打印字符串直到结尾而不是字符串的单个字符的原因是,因为std::cout
将char *
视为指向C的第一个字符的指针样式字符串并打印出来。 1
你的阵列:
char Str[] = "abcdefg";
在结尾处隐式赋值'\0'
,并将其视为C样式字符串。
是否与
std::cout
如何显示数组有关?
这与std::cout
处理C-style strings的方式有关,要测试此更改数组类型为int
并查看差异,即它将打印单个元素。
1。这是因为在C中没有字符串类型,字符串通过类型为char
的指针进行操作,指示开始和终止字符:'\0'
,表示结束。