Redian新闻
>
借人气问个c语言的问题,求救
avatar
借人气问个c语言的问题,求救# WaterWorld - 未名水世界
f*6
1
#include
#include
int main(int argc, char *argv[])
{
int value, base;
int remainder, place=79;
char buffer[80];
line_1 //buffer[79]=(char)(0);//不加这一行就有乱码
char *table ="0123456789ABCDEF";
value = atoi(argv[1]);
base = atoi(argv[2]);
printf("%d %dn", value, base);
do {
remainder = value%base;
printf("%cn", table[remainder]);
buffer[place] = (char)(table[remainder]);
printf("%cn", buffer[place]);
place--;
value=value/base;
}while(value!=0);
place++;
line_2 printf("%s", &buffer[place]);
return 0;
}
为啥line_2会打出乱码,如果不加line_1这一行的话。 这个buffer会被些乱七八糟的
东西占用吗?求解。。。
avatar
r*g
2
char buffer[80];
这个要置0吧。
avatar
f*6
3
哦, 不值零就会被占用?如何制零?buffer[80]=?就是说一般用buffer
要先清空了?

【在 r*******g 的大作中提到】
: char buffer[80];
: 这个要置0吧。

avatar
r*g
4
应该吧, 不然是不确定状态。可能C比较老, 其他的都主动置0 了。

【在 f******6 的大作中提到】
: 哦, 不值零就会被占用?如何制零?buffer[80]=?就是说一般用buffer
: 要先清空了?

avatar
f*6
5
了解,非常感谢。

【在 r*******g 的大作中提到】
: 应该吧, 不然是不确定状态。可能C比较老, 其他的都主动置0 了。
avatar
O*d
6
C/C++都不会自动置零。主要是为了速度。

【在 r*******g 的大作中提到】
: 应该吧, 不然是不确定状态。可能C比较老, 其他的都主动置0 了。
avatar
O*d
7
C的字串需要在末尾置零,明确告诉使用它的函数这里是终结点。 如果没有人为放置这
个终结点,函数就会一直走下去,直到偶然碰到一个0。 这中间的数值,都是不确定的
,印出来都是垃圾。 你把第一个字母放在buffer[78], 如果buffer[79]不是0,printf
会一直印到遇到一个0

【在 f******6 的大作中提到】
: #include
: #include
: int main(int argc, char *argv[])
: {
: int value, base;
: int remainder, place=79;
: char buffer[80];
: line_1 //buffer[79]=(char)(0);//不加这一行就有乱码
: char *table ="0123456789ABCDEF";
: value = atoi(argv[1]);

avatar
H*r
8
不是Null吗?

printf

【在 O*******d 的大作中提到】
: C的字串需要在末尾置零,明确告诉使用它的函数这里是终结点。 如果没有人为放置这
: 个终结点,函数就会一直走下去,直到偶然碰到一个0。 这中间的数值,都是不确定的
: ,印出来都是垃圾。 你把第一个字母放在buffer[78], 如果buffer[79]不是0,printf
: 会一直印到遇到一个0

avatar
t*s
9
#define NULL (void*)0
你可以在stdlib.h里找到

【在 H**r 的大作中提到】
: 不是Null吗?
:
: printf

avatar
b*y
10
这个问题太太太初级了吧。C语言不置零就是内存里面的随机数,当然是乱码。
avatar
b*y
11
What is null? There is no "null" in a computer. "null" is a word that exists
only in human mind. In many programming languages, they have a keyword "
null" which has to be mapped to something in the real memory. In C, null
means 0.

【在 H**r 的大作中提到】
: 不是Null吗?
:
: printf

avatar
m*x
12
char buffer[80] = 0;
c string是靠'\0'来断字符串的,printf如果找不到'/0'就会一直连下去,和你assign
的array大小没有关系。所以如果你buffer[79]=0, 这个'\0'就出现在第80个字符,所
以80个字符后面就没乱码了。

【在 f******6 的大作中提到】
: 哦, 不值零就会被占用?如何制零?buffer[80]=?就是说一般用buffer
: 要先清空了?

avatar
n*k
13
printf("%cn", buffer[place]);
应该是
printf("%c\n", buffer[place]);
buffer[79]=(char)(0) 这个应该没有任何作用啊。你除余的时候,把第80个字符
buffer[79]又给改写了。 place应该设成78,倒数第二个字符。
另外,在C里面,ascii的0,'\0',NULL不是同一个意思么?
avatar
d*h
14
绝大多数是,但不一定。有的系统里面可能0xFF是NULL。
avatar
U*5
15
char buffer[80];
line_1 //buffer[79]=(char)(0);//不加这一行就有乱码
---
line_1实际上就是把buffer变成 Null-terminated of char array.

【在 f******6 的大作中提到】
: #include
: #include
: int main(int argc, char *argv[])
: {
: int value, base;
: int remainder, place=79;
: char buffer[80];
: line_1 //buffer[79]=(char)(0);//不加这一行就有乱码
: char *table ="0123456789ABCDEF";
: value = atoi(argv[1]);

avatar
l*o
16
看这个问题相当于听了一遍山丹丹花开红又艳。
avatar
S*n
17
自己暴露了是F2文科女.

【在 f******6 的大作中提到】
: #include
: #include
: int main(int argc, char *argv[])
: {
: int value, base;
: int remainder, place=79;
: char buffer[80];
: line_1 //buffer[79]=(char)(0);//不加这一行就有乱码
: char *table ="0123456789ABCDEF";
: value = atoi(argv[1]);

avatar
c*m
18
lol

【在 l*****o 的大作中提到】
: 看这个问题相当于听了一遍山丹丹花开红又艳。
avatar
s*8
19
不一定是随机数,应该是以前这段内存里的内容。
我们有个人就犯过这个错误,给我们发了个log,里面都是他的密码,而且他的密码是
用他狗的名字加上他的生日,给我们嘲笑了整整一个星期。

【在 b***y 的大作中提到】
: 这个问题太太太初级了吧。C语言不置零就是内存里面的随机数,当然是乱码。
avatar
b*7
20
随机数的定义就是whatever was there.

【在 s******8 的大作中提到】
: 不一定是随机数,应该是以前这段内存里的内容。
: 我们有个人就犯过这个错误,给我们发了个log,里面都是他的密码,而且他的密码是
: 用他狗的名字加上他的生日,给我们嘲笑了整整一个星期。

avatar
I*c
21
这个讲得对。

printf

【在 O*******d 的大作中提到】
: C的字串需要在末尾置零,明确告诉使用它的函数这里是终结点。 如果没有人为放置这
: 个终结点,函数就会一直走下去,直到偶然碰到一个0。 这中间的数值,都是不确定的
: ,印出来都是垃圾。 你把第一个字母放在buffer[78], 如果buffer[79]不是0,printf
: 会一直印到遇到一个0

avatar
w*r
22
这个年头还学C,太落伍了
avatar
f*6
23
还真不是, 太久没接触这些了,另,f2不用自己学啊,呵呵

【在 S*******n 的大作中提到】
: 自己暴露了是F2文科女.
avatar
f*6
24
那学啥? java? C++?

【在 w****r 的大作中提到】
: 这个年头还学C,太落伍了
avatar
s*e
25
轻视C就是完全不懂CS的表现。

【在 w****r 的大作中提到】
: 这个年头还学C,太落伍了
avatar
w*r
26
按照你这个理论,不读phd的都不懂cs
工作和学科两码事,cs里面专业多了去了,搞图像处理,网络,数据库,运算,服务器
,那怕是IT,未必见得C是各个工作的基础。
不是轻视,是没有必要抬高,谢谢

【在 s***e 的大作中提到】
: 轻视C就是完全不懂CS的表现。
avatar
f*6
27
抬杠这么积极,哈哈!无视我的建议请求啊.

【在 w****r 的大作中提到】
: 按照你这个理论,不读phd的都不懂cs
: 工作和学科两码事,cs里面专业多了去了,搞图像处理,网络,数据库,运算,服务器
: ,那怕是IT,未必见得C是各个工作的基础。
: 不是轻视,是没有必要抬高,谢谢

avatar
c*p
28
学CS的很难绕开C/C++吧。
我倒是觉得学完C和汇编之后对系统的理解深了不少。

【在 w****r 的大作中提到】
: 按照你这个理论,不读phd的都不懂cs
: 工作和学科两码事,cs里面专业多了去了,搞图像处理,网络,数据库,运算,服务器
: ,那怕是IT,未必见得C是各个工作的基础。
: 不是轻视,是没有必要抬高,谢谢

avatar
S*n
29
F2都从基本学起。
现在找工都学Java或.net,要不就SAS

【在 f******6 的大作中提到】
: 还真不是, 太久没接触这些了,另,f2不用自己学啊,呵呵
avatar
B*d
30
和编译器有关系

【在 m**x 的大作中提到】
: char buffer[80] = 0;
: c string是靠'\0'来断字符串的,printf如果找不到'/0'就会一直连下去,和你assign
: 的array大小没有关系。所以如果你buffer[79]=0, 这个'\0'就出现在第80个字符,所
: 以80个字符后面就没乱码了。

avatar
d*n
31
密码明文存在内存里?

【在 s******8 的大作中提到】
: 不一定是随机数,应该是以前这段内存里的内容。
: 我们有个人就犯过这个错误,给我们发了个log,里面都是他的密码,而且他的密码是
: 用他狗的名字加上他的生日,给我们嘲笑了整整一个星期。

avatar
r*g
32
叉,作为马公我感觉自己好厉害
avatar
O*d
33
不是。 NULL的定义是数值为零的地址。 其长度可以是32bit,也可以是64bit。 字串
的末尾零是'\0'
avatar
O*d
34
C语言里,没有NULL的定义。 有整数0,长度是32bit。 有char 0, 就是'\0'
avatar
O*d
35
C有很多概念,对于理解高层次和低层次语言帮助很大。 如果你作驱动器,牵涉到硬件
,只有C和assembly。

【在 w****r 的大作中提到】
: 这个年头还学C,太落伍了
avatar
g*l
36
代码有问题,buffer某些情况下无法初始化
while后面应该place!=0

【在 f******6 的大作中提到】
: #include
: #include
: int main(int argc, char *argv[])
: {
: int value, base;
: int remainder, place=79;
: char buffer[80];
: line_1 //buffer[79]=(char)(0);//不加这一行就有乱码
: char *table ="0123456789ABCDEF";
: value = atoi(argv[1]);

avatar
s*8
37
Windows都用明文在内存传递密码。
比如CreateProcessWithLogonW
其他系统如何做的?

【在 d*******n 的大作中提到】
: 密码明文存在内存里?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。