char *s="\ta
8bc";
for(;s!='
';s++) for(;s!='
';s++
char *s="\ta\018bc";
for(;s!='\0';s++)
printf("%d",i);
问:循环执行多少次?
答案是6,我觉得是5
用TC跑一下,改装如下:
void main()
{ long i;
char *s="\ta\018bc";
for(i=1;s!='\0';s++)
i++;
printf("%d",i);
}
结果:-403
可见是溢出了,但为什么,不太清楚.
哪位帮解释一下,来龙去脉.
结果:
a☺8bc
6
up
我也有此疑惑~~~但是编译器编译成了\01~~~
因为楼主这样写相当于,当s!=0的时候,就一直i++
由于在很久才遇到s==0,结果由于i不断累加,产生了溢出,所以就输出了-403当然,这个数是不确定的,取决于什么时候遇到s==0
for(;s!='\0';s++)
printf("%d",i);
问:循环执行多少次?
答案是6,我觉得是5
用TC跑一下,改装如下:
void main()
{ long i;
char *s="\ta\018bc";
for(i=1;s!='\0';s++)
i++;
printf("%d",i);
}
结果:-403
可见是溢出了,但为什么,不太清楚.
哪位帮解释一下,来龙去脉.
19 个解决方案
#1
*s!='\0'
#2
\ta8bc 最后i==7; 循环执行了6次!
#3
'\t' 'a' '\01' '8' 't' 'c'
#4
int main()
{ int i = 0;
const char *s="\ta\018bc";
char* ps = s;
for(;*ps != '\0';ps++)
{
i++;
printf("%c",*ps);
}
printf("\n%d",i);
getch();
return 0;
}
结果:
a☺8bc
6
#5
#include <stdio.h>
int main(void)
{
int i;
char *s = "\ta\018bc";
i = printf("%s", s);
printf("\n%d\n", i);
return 0;
}
#6
'\01'代表什么 为什么ASII值是1
#7
??不是遇到'\0'就停了吗?"\ta\018bc"中间出现'\0'了啊~怎么还会继续往后啊~
#8
字符串中'\'代表转义
#9
up
#10
我也有此疑惑~~~但是编译器编译成了\01~~~
#11
for(; s!='\0';s++) --> *s!='\0'
'\t' 'a' '\01' '8' 't' 'c' 循环六次
'\t' 'a' '\01' '8' 't' 'c' 循环六次
#12
\01 是八进制的转义符, 去掉0也是一样的
#13
呵呵,楼上的正解。
#14
for(i=1;s!='\0';s++)
i++;
printf("%d",i); //这句话不在for循环里面
因为楼主这样写相当于,当s!=0的时候,就一直i++
由于在很久才遇到s==0,结果由于i不断累加,产生了溢出,所以就输出了-403当然,这个数是不确定的,取决于什么时候遇到s==0
#15
void main()
{ long i;
char *s="\ta\018bc";
char *ptr;
ptr=s;
while(*ptr)
printf("%d,",*ptr++);
printf("%d",i);
}
~
~
#16
<<C程序设计>>谭浩强著第三版,
P40:以0开头的数是八进制数
P48:转义字符及其作用中,\ddd,其中ddd为1到3位八进制数所代表的字符
1到3位那是多少位都行但是八进制没有8,所以8作为另一个字符
P40:以0开头的数是八进制数
P48:转义字符及其作用中,\ddd,其中ddd为1到3位八进制数所代表的字符
1到3位那是多少位都行但是八进制没有8,所以8作为另一个字符
#17
不懂为什么是6次的可以把 char *s="\ta\018bc";
换成 char *s="\ta\017bc";
试试就是5次了。\017整个解释成8进制。\018就解释成八进制\01和8两个字符了
换成 char *s="\ta\017bc";
试试就是5次了。\017整个解释成8进制。\018就解释成八进制\01和8两个字符了
#18
大家都讨论的这么深入了,俺就放点理论知识出来。
千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。
我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。
比如,问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,这个内容,大家仅仅了解就行。
千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。
我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。
比如,问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,这个内容,大家仅仅了解就行。
#19
mark
8bc";
for(;s!='
char *s="\ta\018bc";
for(;s!='\0';s++)
printf("%d",i);
问:循环执行多少次?
答案是6,我觉得是5
用TC跑一下,改装如下:
void main()
{ long i;
char *s="\ta\018bc";
for(i=1;s!='\0';s++)
i++;
printf("%d",i);
}
结果:-403
可见是溢出了,但为什么,不太清楚.
哪位帮解释一下,来龙去脉.
结果:
a☺8bc
6
up
我也有此疑惑~~~但是编译器编译成了\01~~~
因为楼主这样写相当于,当s!=0的时候,就一直i++
由于在很久才遇到s==0,结果由于i不断累加,产生了溢出,所以就输出了-403当然,这个数是不确定的,取决于什么时候遇到s==0
for(;s!='\0';s++)
printf("%d",i);
问:循环执行多少次?
答案是6,我觉得是5
用TC跑一下,改装如下:
void main()
{ long i;
char *s="\ta\018bc";
for(i=1;s!='\0';s++)
i++;
printf("%d",i);
}
结果:-403
可见是溢出了,但为什么,不太清楚.
哪位帮解释一下,来龙去脉.
19 个解决方案
#1
*s!='\0'
#2
\ta8bc 最后i==7; 循环执行了6次!
#3
'\t' 'a' '\01' '8' 't' 'c'
#4
int main()
{ int i = 0;
const char *s="\ta\018bc";
char* ps = s;
for(;*ps != '\0';ps++)
{
i++;
printf("%c",*ps);
}
printf("\n%d",i);
getch();
return 0;
}
结果:
a☺8bc
6
#5
#include <stdio.h>
int main(void)
{
int i;
char *s = "\ta\018bc";
i = printf("%s", s);
printf("\n%d\n", i);
return 0;
}
#6
'\01'代表什么 为什么ASII值是1
#7
??不是遇到'\0'就停了吗?"\ta\018bc"中间出现'\0'了啊~怎么还会继续往后啊~
#8
字符串中'\'代表转义
#9
up
#10
我也有此疑惑~~~但是编译器编译成了\01~~~
#11
for(; s!='\0';s++) --> *s!='\0'
'\t' 'a' '\01' '8' 't' 'c' 循环六次
'\t' 'a' '\01' '8' 't' 'c' 循环六次
#12
\01 是八进制的转义符, 去掉0也是一样的
#13
呵呵,楼上的正解。
#14
for(i=1;s!='\0';s++)
i++;
printf("%d",i); //这句话不在for循环里面
因为楼主这样写相当于,当s!=0的时候,就一直i++
由于在很久才遇到s==0,结果由于i不断累加,产生了溢出,所以就输出了-403当然,这个数是不确定的,取决于什么时候遇到s==0
#15
void main()
{ long i;
char *s="\ta\018bc";
char *ptr;
ptr=s;
while(*ptr)
printf("%d,",*ptr++);
printf("%d",i);
}
~
~
#16
<<C程序设计>>谭浩强著第三版,
P40:以0开头的数是八进制数
P48:转义字符及其作用中,\ddd,其中ddd为1到3位八进制数所代表的字符
1到3位那是多少位都行但是八进制没有8,所以8作为另一个字符
P40:以0开头的数是八进制数
P48:转义字符及其作用中,\ddd,其中ddd为1到3位八进制数所代表的字符
1到3位那是多少位都行但是八进制没有8,所以8作为另一个字符
#17
不懂为什么是6次的可以把 char *s="\ta\018bc";
换成 char *s="\ta\017bc";
试试就是5次了。\017整个解释成8进制。\018就解释成八进制\01和8两个字符了
换成 char *s="\ta\017bc";
试试就是5次了。\017整个解释成8进制。\018就解释成八进制\01和8两个字符了
#18
大家都讨论的这么深入了,俺就放点理论知识出来。
千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。
我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。
比如,问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,这个内容,大家仅仅了解就行。
千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。
我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。
比如,问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,这个内容,大家仅仅了解就行。
#19
mark
';s++) for(;s!='
char *s="\ta\018bc";
for(;s!='\0';s++)
printf("%d",i);
问:循环执行多少次?
答案是6,我觉得是5
用TC跑一下,改装如下:
void main()
{ long i;
char *s="\ta\018bc";
for(i=1;s!='\0';s++)
i++;
printf("%d",i);
}
结果:-403
可见是溢出了,但为什么,不太清楚.
哪位帮解释一下,来龙去脉.
结果:
a☺8bc
6
up
我也有此疑惑~~~但是编译器编译成了\01~~~
因为楼主这样写相当于,当s!=0的时候,就一直i++
由于在很久才遇到s==0,结果由于i不断累加,产生了溢出,所以就输出了-403当然,这个数是不确定的,取决于什么时候遇到s==0
for(;s!='\0';s++)
printf("%d",i);
问:循环执行多少次?
答案是6,我觉得是5
用TC跑一下,改装如下:
void main()
{ long i;
char *s="\ta\018bc";
for(i=1;s!='\0';s++)
i++;
printf("%d",i);
}
结果:-403
可见是溢出了,但为什么,不太清楚.
哪位帮解释一下,来龙去脉.
19 个解决方案
#1
*s!='\0'
#2
\ta8bc 最后i==7; 循环执行了6次!
#3
'\t' 'a' '\01' '8' 't' 'c'
#4
int main()
{ int i = 0;
const char *s="\ta\018bc";
char* ps = s;
for(;*ps != '\0';ps++)
{
i++;
printf("%c",*ps);
}
printf("\n%d",i);
getch();
return 0;
}
结果:
a☺8bc
6
#5
#include <stdio.h>
int main(void)
{
int i;
char *s = "\ta\018bc";
i = printf("%s", s);
printf("\n%d\n", i);
return 0;
}
#6
'\01'代表什么 为什么ASII值是1
#7
??不是遇到'\0'就停了吗?"\ta\018bc"中间出现'\0'了啊~怎么还会继续往后啊~
#8
字符串中'\'代表转义
#9
up
#10
我也有此疑惑~~~但是编译器编译成了\01~~~
#11
for(; s!='\0';s++) --> *s!='\0'
'\t' 'a' '\01' '8' 't' 'c' 循环六次
'\t' 'a' '\01' '8' 't' 'c' 循环六次
#12
\01 是八进制的转义符, 去掉0也是一样的
#13
呵呵,楼上的正解。
#14
for(i=1;s!='\0';s++)
i++;
printf("%d",i); //这句话不在for循环里面
因为楼主这样写相当于,当s!=0的时候,就一直i++
由于在很久才遇到s==0,结果由于i不断累加,产生了溢出,所以就输出了-403当然,这个数是不确定的,取决于什么时候遇到s==0
#15
void main()
{ long i;
char *s="\ta\018bc";
char *ptr;
ptr=s;
while(*ptr)
printf("%d,",*ptr++);
printf("%d",i);
}
~
~
#16
<<C程序设计>>谭浩强著第三版,
P40:以0开头的数是八进制数
P48:转义字符及其作用中,\ddd,其中ddd为1到3位八进制数所代表的字符
1到3位那是多少位都行但是八进制没有8,所以8作为另一个字符
P40:以0开头的数是八进制数
P48:转义字符及其作用中,\ddd,其中ddd为1到3位八进制数所代表的字符
1到3位那是多少位都行但是八进制没有8,所以8作为另一个字符
#17
不懂为什么是6次的可以把 char *s="\ta\018bc";
换成 char *s="\ta\017bc";
试试就是5次了。\017整个解释成8进制。\018就解释成八进制\01和8两个字符了
换成 char *s="\ta\017bc";
试试就是5次了。\017整个解释成8进制。\018就解释成八进制\01和8两个字符了
#18
大家都讨论的这么深入了,俺就放点理论知识出来。
千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。
我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。
比如,问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,这个内容,大家仅仅了解就行。
千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。
我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。
比如,问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,这个内容,大家仅仅了解就行。
#19
mark
';s++