strupr()函数奇怪问题
来源:互联网 发布:程序员的数学1 2 3pdf 编辑:程序博客网 时间:2024/06/10 14:52
strupr函数奇怪问题??不知道是不是vc的Bug
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char *s="abcd";
printf("%s",strupr(s));
return 0;
}
这段代码编译通过,运行却出错??请问到底是什么问题呢?觉得代码是没问题的
那为什么呢??郁闷..希望帮助解答..谢谢
char *s="abcd";
这句话在c++书的前面基础章节里介绍过,s是栈中分配的指针,它指向个内存常量"abcd",也就是说s可以改变,如s="jksl"只不过又指向了内存中另一个常量jksl",但是内存里的常量不能改变,所以*s='a'肯定出错,因为你试图更改内存常量了。
strupr(s)
这个函数定义如下:
char* strupr(char * string)
{
char *cp;
for (cp = string; *cp; ++cp) {
if ('a' <= *cp && *cp <= 'z')
*cp += 'A' - 'a';
}
return(string);
}
这句话里有*cp += 'A' - 'a'这个,所以你试图更改内存常量,当然是非法的。那怎么更改右2个方法:
1.char s[]="abcd";数组是直接在栈中分配的,你可以放心使用*='某某'
2.使用函数strdup复制一个字符串。
下面对这两种方法写下代码:
1.
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char s[]="abcd";
printf("%s",strupr(s));
return 0;
}
2.
#include <string.h>
#include <stdio.h>
#include<malloc.h>
int main(int argc, char* argv[])
{
char* s="abcd";
char* p=strdup(s);
printf("%s",strupr(p));
free(p);
return 0;
}
所以抱歉了,我打破了你发现vc中bug的梦了。
- strupr()函数奇怪问题
- strlwr,strupr函数
- 字符串函数strupr
- strlwr,strupr函数
- strlwr,strupr函数
- strupr
- accept()函数的奇怪问题
- php array_shift 函数奇怪问题
- strupr与strlwr函数的实现
- 奇怪问题
- 奇怪问题
- 奇怪问题
- 实现 strupr
- 调用javascript遇到奇怪的“函数未定义”问题
- 函数返回值的判断的奇怪问题
- 虚幻4 pure函数导致的奇怪问题
- 系统函数C字符串的实现(8):strlwr与strupr
- 字符串处理函数:复值函数strcpy、比较函数strcmp、连接函数strcat、大写转换函数strupr
- 用css3实现的简单的云朵
- 简述BSD协议和GPL协议的区别
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- linux下route命令
- 关于linux的fork用法的思考---读CSAPP
- strupr()函数奇怪问题
- 距离、带宽和延迟对VDI性能的影响
- android 设备唯一码的获取
- oracle小记之建立表空间、用户 和 ORA-28000错误
- AndroidManifest中original-package标签
- C# Lambda Expressions 简介
- android流量统计
- GIF、JPEG、PNG比较
- C中violatile的用法