2 jh199106 jh199106 于 2014.11.18 17:55 提问

C++ 字符串 长度 指针

int main()
{
char const * pStr="the long string";
char const *p=pStr;
while(*p++);
cout<<(p-pStr)<<endl;
}

请问输出结果为什么是16,而不是15?

6个回答

caozhy
caozhy   Ds   Rxr 2014.11.18 18:05

因为*的优先级比++高,所以当p指向\0的时候还会执行一次空循环。

lx624909677
lx624909677   Ds   Rxr 2014.11.18 19:32

第15次执行完会执行下一次,也就是第16次,第16次位FALSE了,才跳出循环

91program
91program   Ds   Rxr 2014.11.18 18:17

因为你的 p 指针在执行完 NULL 判断后,又加了一,所以就多出来一个。

yangyuyu77584
yangyuyu77584   2014.11.18 22:59

主要的原因是i++与++i的区别,i++是先做其他后自加,而++i是先自加后再做其他。当十五次,wile判断的是p的最后一个,不为null,所以还在while循环中,但是这p已经指向pStr后地址,这次再来一次while判断,就是空的,但是p指针还会自己一次,所以他的指针就指向pStr后个第二个地址。所以得到的结果是16.

max_min_
max_min_   Rxr 2014.11.19 00:29

楼主为什么认为不是16 而是15呢?

eagleyan
eagleyan   Rxr 2014.12.01 08:00

while(*p++);
等于
while(*p)
p = p + 1;
p = p + 1;

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
利用指针计算字符串的长度
#include int main() { char s[20]; char *p; printf("please input a string(less than 20 character):\n"); //scanf("%s",s);不能读入空格 gets(s); p = s; while(*p!='\0') p++;
用指针计算字符串长度
用指针计算字符串长度,简单的小程序,c语言
关于字符数组和字符型指针定义的字符串长度问题
用sizeof和strlen来度量字符串所占字节数和字符串长度的测试Printf(“%ld %ld\n”, sizeof(test), strlen(test));Char *test1 = “nihao”;                //85Char test2[] = “nihao”;                //65Char test3[20] = “nihao”;        ...
用指针处理计算字符串长度
#include using namespace std; int hhh(char *pt); void main() { int i; char str[100], *pt = str; cout gets_s(str); cout } int hhh(char *pt) { int n = 0; while (*(pt + n) != '\0'
c++ 求指针指向的字符串长度
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { unsigned char *str; unsigned char str1[3];/*注意这里*/ int len; str="abcdefg"; len=strlen(str); strncpy(str1,str+2,2); str1[2]='/0';/*这一句必须要,但是使用strcpy()时不用*/ print
用字符指针变量指向一个字符串,然后输出字符及其长度
#include #include                                         // 要使用strlen函数 int main() {     char *p;     p = "hello!";     printf("%s",p);     printf("\nThe length is:%d\n",strlen(p));     retur
用指针求出字符串的长度
#include<stdio.h> void strle(char str[]) { char *p; int len = 0; p = str; while(*p) { len++; p++; } printf("%d",len); } void main() { char str[20] = "abcd"
传入字符串,计算字符串长度(用指针实现)
int strlen(char *s) { int i=0; while(*s!='\0') { i++; s++; } return i; } void main() { char str[100]; int len; printf("please input your string:");
算法练习之(任意长度字符串逆向输出)
一:问题描述:将从控制台输入的不定长度的任意字符串逆向输出 二:程序分析:既然不定长度,说明不能使用反向迭代方式实现,而这里要逆向输出,而且不知道入参的长度,最佳的实现方式就是利用递归来实现。 三:用java语言实现任意长度字符串的逆向输出package algorithm;import java.util.Scanner;/** * @packagname:algorithm * @class
获取char指针内容的长度
如果能确定所指变量为字符串地址,可以用strlen(p)取得字符串长度。   strlen能返回字符串的长度是因为它认为到'\0'就是结束的地方 sizeof和内存无关,只根据数据类型来判断,而数据类型的长度和操作系统有关 1: char* a = "c:\\temp\\a.txt\n"; int b = strlen(a);   2: char a[] = "hello w