基础知识 | 每日一练(195)

读者:请问以下代码有什么问题:

小林:

int main()

{

char a;

char *str=& a;

strcpy(str,”hello”);

printf(str);

return 0;

}

没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

读者:

char* s=”AAA”;

printf(“% s”,s);

s[0]=’B’;

printf(“% s”,s);

有什么错?

小林:

“AAA”是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。cosnt char* s=”AAA”;然后又因为是常量,所以对是s[0]的赋值操作是不合法的。

读者:写一个“标准”宏,这个宏输入两个参数并返回较小的一个。

小林:

#define M in(X, Y) ((X)>(Y)?(Y):(X))//结尾没有;——语法上并没有限制宏后面必须没有分号,宏只是简单的字符替换,这里是因为使用M in的地方通常会在后面加分号。

正文完