黑马程序员技术交流社区

标题: C语言一些易犯错误的整理(2) [打印本页]

作者: 林哲生10    时间: 2016-8-2 16:12
标题: C语言一些易犯错误的整理(2)
(1)以下程序会出现什么问题:
#include <stdio.h>
#include <string.h>
int main()
{
    int arr1[4], arr2[5];
    if( strlen(arr1[4]) - strlen(arr2[5]) < 0)
        printf("arr1的元素比arr2的元素少\n");
    else
        printf("arr1的元素比arr2的元素多\n");
    return 0;
}
答案:
#include <stdio.h>
#include <string.h>
int main()
{
    int arr1[4], arr2[5];
    if( (int)strlen(arr1[4]) - (int)strlen(arr2[5]) < 0)
        printf("arr1的元素比arr2的元素少\n");
    else
        printf("arr1的元素比arr2的元素多\n");
    return 0;
}

解析:strlen()函数的返回值是unsigned long类型的,相减无法得到负数.

(2)若有说明: int *p, a = 1, b;以下程序段正确吗?
scanf("%d", &b);
*p = b;
答案:错
解析:p是野指针,不能赋值给一个野指针指向的变量

作者: anan安    时间: 2016-8-2 16:51
不能给野指针赋值要怎么破?



作者: Chenjunfeng    时间: 2016-8-2 20:56
第一个问题提的比较好,第二个问题,我要是想给p指针赋值,该怎么做呢?
作者: 林哲生10    时间: 2016-8-2 21:05
anan安 发表于 2016-8-2 16:51
不能给野指针赋值要怎么破?

那就不要给野指针赋值啊{:2_31:}
作者: 林哲生10    时间: 2016-8-2 21:07
Chenjunfeng 发表于 2016-8-2 20:56
第一个问题提的比较好,第二个问题,我要是想给p指针赋值,该怎么做呢?

让指针指向你已经申请了的一块内存空间,比如变量
作者: Chenjunfeng    时间: 2016-8-2 21:08
兄弟你就业班报名了吗?
作者: 李江波    时间: 2016-8-2 21:10
给p指向nil,那就不是野指针了
作者: 林哲生10    时间: 2016-8-2 21:12
Chenjunfeng 发表于 2016-8-2 21:08
兄弟你就业班报名了吗?

没,加下我好友,赚黑马币中{:2_30:}
作者: Chenjunfeng    时间: 2016-8-2 21:14
林哲生10 发表于 2016-8-2 21:12
没,加下我好友,赚黑马币中

一样,我也在赚黑马币,你准备报哪期的?
作者: Chenjunfeng    时间: 2016-8-2 21:27
我看你发帖挺多的,发帖技术分有增吗?
作者: 林哲生10    时间: 2016-8-2 21:52
Chenjunfeng 发表于 2016-8-2 21:27
我看你发帖挺多的,发帖技术分有增吗?

发帖有2分黑马币
作者: JFPURE    时间: 2016-8-2 22:10
MARK,学习了.{:3_53:}
作者: anan安    时间: 2016-8-2 23:03
林哲生10 发表于 2016-8-2 21:05
那就不要给野指针赋值啊

p = &b;这样就可以 啊,  我想问谁会给一个野指针赋值呢?肯定要想先初始化啊
作者: wc88212    时间: 2016-8-3 22:22
MARK,学习到了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2