社区
C语言
帖子详情
我的程序在Linux下用g++编译时,出现类型强制转换错误怎么班?
sintony
2002-04-22 08:26:27
我有一段在SunOS下编译正常的程序,在Linux下用g++编译,发现cannot convert `const char *' to `char *'的错误。我怎么样能不改源代码,解决这个问题?
...全文
523
10
打赏
收藏
我的程序在Linux下用g++编译时,出现类型强制转换错误怎么班?
我有一段在SunOS下编译正常的程序,在Linux下用g++编译,发现cannot convert `const char *' to `char *'的错误。我怎么样能不改源代码,解决这个问题?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ttyy
2002-04-23
打赏
举报
回复
是否加了:
#include <string.h>
shornmao
2002-04-23
打赏
举报
回复
下面的是我的代码,在g++-2.95-win32下完全没有任何问题,你的g++版本是什么?如果真的想兼容旧的代码,可以试一试-ansi和-fno-const-strings命令行参数。
#include <iostream>
void greeting(char *str);
int main()
{
greeting("shorn");
cin.ignore();
return 0;
}
void greeting(char *str)
{
cout<<"Hello,"<<str<<".\n";
}
prototype
2002-04-23
打赏
举报
回复
gcc is right. you should not do 类型强制转换 to a string
literal like "test" (if you write to a memory where "test"
is stored, the result is undefined).
btw, don't write a function like:
void A( char *pstr);
which indicates a bad design. always design it as:
void A( const char* pstr);
sintony
2002-04-23
打赏
举报
回复
这些我都知道,但是我现在就想不该源代码解决这个问题呀!
Last_Dodo
2002-04-23
打赏
举报
回复
那是Sun和MS的错。因为你的参数是char *所以你的函数可能对它做改动,而const char*是不允许你改内容的。即使强制转换也是很危险的,最好是把参数改成const char*或:
char buf[...];
strcpy(buf, "test");
然后传进去。
sintony
2002-04-22
打赏
举报
回复
"test"是const char*,但是我的函数的参数应该是char *,所以要强制转换!但是我不想这么做应为有很多地方。所以我觉得因该改一个编译器的标志能忽略这个错误。这个程序在SUNOS下和Windows下都是没有问题的!
winnest
2002-04-22
打赏
举报
回复
"test"肯定是const char*类型的啊,g++下是对的。
如果你的是C程序,用gcc而不用g++就可以了吧。
sintony
2002-04-22
打赏
举报
回复
不是呀!我有一个函数比如
void A( char *pstr);
可是我调用的时候用
A("test");
这样就会出现cannot convert `const char *' to `char *'
应该修改一下编译器的flag就好了,但是我不知道怎么修改
maoliao
2002-04-22
打赏
举报
回复
只要使用const_cast函数即可
xupingle
2002-04-22
打赏
举报
回复
把你的代码给出来看看。
linux
编译
maxdata,
linux
下
g++
编译
书上的socket的例子出错,请帮忙看看?
我客户端例子:#include#include#include#include#include#include#include#include#definePORT3490#defineMAXDATASIZE100intmain(intargc,char*argv[]){intsockfd,numbytes;charbuf[MAXDATASIZE];structhost...
关于
linux
下C++中利用socket
时
的数据
类型
转换
错误
例:ssize_t recvfrom(int sockfd, void *buff, size nbytes, int flags, struct sockaddr *from, socklen_t *addrlen);最后一个参数不可为int*,否则报错将参数
类型
改为socklen_t *后恢复正常该数据
类型
可作为sizeof的返回值,不需
强制转换
(同int?)gcc
编译
时
无此问题,利用
g++
编
C++结构体强制
类型
转换:内存布局、对齐与安全实践详解
强制
类型
转换是C++中连接高级抽象与底层内存操作的核心技术,它允许开发者重新解释内存数据的
类型
。其原理基于
编译
器对内存布局的直接操作,绕过
类型
系统的静态检查。这项技术的核心价值在于实现高性能的底层系统编程、硬件交互、网络协议解析以及与C语言库的无缝对接。在应用场景上,它常见于序列化/反序列化、泛型容器实现和跨语言接口调用。然而,不当使用会引发严格别名规则违规和内存对齐问题,导致未定义行为。本文聚焦于结构体场景,深入解析reinterpret_cast等转换方式的安全边界,强调标准布局
类型
验证和std::me
Linux
下
g++
编译
器安装与配置全攻略:从新手到精通
在
Linux
系统上进行C++开发,
编译
器是工具链的核心基础。GNU
编译
器集合(GCC)中的
g++
作为C++代码的
编译
前端,负责将源代码转换为可执行
程序
,其工作原理涉及预处理、
编译
、汇编和链接等多个阶段。掌握
g++
的安装与配置对于构建高效、可移植的C++项目具有重要技术价值,它不仅是学习
Linux
开发环境的起点,更是深入理解自动化构建、调试和性能优化的基石。在实际应用场景中,无论是使用CMake进行跨平台项目构建,还是通过Makefile管理复杂依赖,一个正确配置的
g++
环境都是确保开发流程顺畅的关键。本文聚
【C++】C++ 四种
类型
转换(Visual Studio 2022 版):从 C 风格转换讲到 dynamic_cast
在 C 语言里,当不一样
时
,就会触发
类型
转换。C语言强转缺陷:转换的可视性较差,所有转换都写成同一种形式,很难定位出错的
类型
转换,不利于跟踪
错误
。
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章