我从一个教程中复制了此代码以进行操作,但是我不断遇到一个错误,指出我不能有任何空字符常量。 该教程是在VS 2008中使用的,而我正在使用VS 2013,所以也许这不再有效,但我找不到任何修复方法。

这是代码:

#include"stdafx.h"

#include

class MyString

{

private:

char *m_pchString;

int m_nLength;

public:

MyString(const char *pchString="")

{

// Find the length of the string

// Plus one character for a terminator

m_nLength = strlen(pchString) + 1;

// Allocate a buffer equal to this length

m_pchString = new char[m_nLength];

// Copy the parameter into our internal buffer

strncpy(m_pchString, pchString, m_nLength);

// Make sure the string is terminated

//this is where the error occurs

m_pchString[m_nLength-1] = '';

}

~MyString() // destructor

{

// We need to deallocate our buffer

delete[] m_pchString;

// Set m_pchString to null just in case

m_pchString = 0;

}

char* GetString() { return m_pchString; }

int GetLength() { return m_nLength; }

};

int main()

{

MyString cMyName("Alex");

std::cout <

return 0;

}

我得到的错误如下:

Error   1   error C2137: empty character constant

任何帮助将不胜感激

再次感谢。

要终止C样式字符串,请使用空字符 0。

您知道吗:如果在"错误列表"选项卡中双击Visual Studio错误,它将带您到发生错误的那一行并突出显示错误? 这样使查找和修复此类问题变得更加容易。 另外,在发布到SO时,请包括行号?

公平地说,@ kfsone Manny确实知道是哪行引起了该问题,甚至在代码中加上了注释。

在评论中,它指出了错误的出处,但在下次的解释中,谢谢。

这行:

m_pchString[m_nLength-1] = '';

您可能的意思是:

m_pchString[m_nLength-1] = '\0';

甚至:

m_pchString[m_nLength-1] = 0;

字符串以零结尾,以纯0或空字符'\0'的形式编写。 对于双引号字符串"",会在末尾隐式添加零终止字符,但是由于您显式设置了单个字符,因此必须指定哪个字符。

由于字符串文字为空终止,因此也可以写""

但是然后我收到一条错误消息,指出如果我使用null终止符,strncpy是不安全的

@ssnobody很好,您不能这样写,说:m_pchString[m_nLength-1] ="";,因为""实际上是指向以null结尾的字符串的指针,而不是单个字符。

@Manny最安全的版本是strncpy_s en.cppreference.com/w/c/string/byte/strncpy

但是strncpy_s不接受我列出的参数

@Manny不,但这是更安全的版本。但是请记住,这是一个警告,告诉您strncpy是不安全的,不是错误。并且由于您自己创建了结果缓冲区,并具有足够的容量来容纳整个字符串,因此您不必担心。

@TommyA是的。如果要利用字符串文字终止,可以执行m_pchString[m_nLength-1] =""[0];,但这显然比char样式复杂(且可读性差)。

strncpy的"安全性"在stackoverflow.com/q/869883/3466415中讨论。就个人而言,我尝试避免使用" strcpy"函数的任何变体,除非在经过全面检查和测试的代码中使用(大多数情况下,我更喜欢std::string),并且我关闭了VS警告。

对不起,我没有正确阅读整个文档。 @TommyA,谢谢

您已经说过"您收到一条错误消息,指出如果我使用null终止符,则strncpy是不安全的",但是您使用的是strlen,如果字符串不是null终止的,这根本行不通。 从cplusplus:

The length of a C string is determined by the terminating null-character

我对您的建议是像其他人建议的那样使用null或0,然后使用strcpy而不是strncpy,因为无论如何每次都复制整个字符串。

您如何看待以null结尾的字符串? 是的,您是对的,此类字符串必须以null结尾:

m_pchString [m_nLength-1] = 0;

但是然后编译器说strncpy是不安全的

c语言中的空字符常量,C ++中的空字符常量相关推荐

  1. c语言变量作为数组长度,为什么在C中不允许将数组的大小作为常量变量但在C中允许?...

    在C const中,并不意味着"常量"(即,在编译时可评估).它只是意味着只读. 例如,在一个函数中,这个: const int r = rand(); const time_t ...

  2. python中数字是常量吗,【python】常量与变量

    1.代码 (1)机器码:由二进制组成,是给计算机看的,计算机可以直接执行. (2)汇编码:由数字.字母和符号组成的代码. 汇编语言书写的代码必须按照计算机的计算流程 (写代码的流程就是模拟计算机运行的 ...

  3. 初学者宝典:C语言入门基础知识大全(中)

    04 常量 在程序运行中,其值不能被改变的量称为常量.常量有5种类型:整型常量.实型常量.字符常量.字符串常量和符号常量. 4.1 数值转换 - 数值的四种表现形式: ①:二进制:所有数字由0,1构成 ...

  4. string 中的offset_【Java基础】String常量的长度有限制吗?

    备注:JDK版本:1.8.0 最近同事问了我一个问题,String常量有长度限制吗? 为什么会问起这个问题呢,因为同事在开发中确实遇到了IDEA编译器编译过程中提示字符串常量过长的异常.异常的出现也就 ...

  5. C语言统计一个字符串(包含空格)中字母的种类(不是个数)

    C语言统计一个字符串(包含空格)中字母的种类(不是个数) 写了一个小程序来通过输入一个字符串后,统计26个字母中出现了几种. 例如:输入juue 输入3输入abcd efg lmn输出10 思路简述 ...

  6. c语言字母存储,字符串在内存中的储存——C语言进阶

    字符串在内存中的存储--C语言进阶 字符串是以ASCII字符NUL结尾的字符序列.ASCII字符NUL表示为\0.字符串通常存储在数组或者从堆上分配的内存中.不过,并非所有的字符数组都是字符串,字符数 ...

  7. final修饰的变量就是常量?final修饰局部变量在栈还是堆还是常量池中?

    概念 常量池 常量池的好处 Class类文件中的常量池 常量池 运行时常量池 包装类常量池对象池 Java中装箱和拆箱 赋值时 方法调用时 方法运算时 参考 概念 什么是常量? 对于这个问题,可能很多 ...

  8. 易语言取c盘文件夹中的文件被占用,易语言检测文件被哪个进程占用的代码

    易语言检测文件被哪个进程占用的代码 检测文件占用的代码 此功能需要加载贝贝吧模块6.6 .版本 2 .支持库 eAPI .程序集 窗口程序集_启动窗口 .子程序 _查询按钮_被单击 .局部变量 进程名 ...

  9. java定义常量_JAVA中定义常量方法

    JAVA中定义常量方法 (2013-01-28 14:30:19) 标签: it 一.常量定义的基本注意事项. 在Java语言中,主要是利用final关键字(在Java类中灵活使用Static关键字) ...

  10. class文件常量池中字符串类 urf8格的存储格式

    java虚拟机在class文件中对应类型的常量池中使用了一种类似utf8格式的变体来存储一个常量字符串. (这里请不要和java se的string api搞混淆,这里谈的是class文件的文件格式问 ...

最新文章

  1. 删除当前及子文件夹中的空目录
  2. 在项目开始前,为客户做专门的“需求变更流程”培训是必要的
  3. Visual Studio 2017 15.5预览版添加对F# Core及Standard的支持
  4. zabbix3.2监控
  5. oracle批量联机,Oracle 12.2 使用联机重定义对表进行多处改变
  6. 重命名Heroku的app
  7. 【vue开发问题-解决方法】(八)利用axios拦截器实现elementUI中加载动画,控制加载区域
  8. gnuTLS 提供的 DTLS-API
  9. android 同步list数据,android SharedPreferences保存list数据
  10. wubi for ubuntu 9.04 无法运行
  11. 最详细的quartz表达式解释
  12. AVAudioPlayer音频播放器—IOS开发
  13. 毕业4年,给自己来个了结,^_^
  14. 服务器信号满格网速很慢,网速变得很慢(wifi信号满格但网速慢)
  15. 【组合数学 】 推广牛顿二项式 ( 牛顿二项式推广 | 推导流程 | 题目解析 )
  16. 撸了个反代工具, 可用于激活JRebel
  17. 计算机强制退出程序键,电脑强制关闭程序按哪三个键
  18. 对统驭科目和特别总账标志的理解
  19. D3DXCreateTextureFromFileEx创建纹理的悲催
  20. Virustotal的使用

热门文章

  1. 怎么才能获得一个mid文件的音调
  2. XPS文件转换成PDF
  3. 华为星环大数据_华为和星环大数据平台关键能力对比(附报告)
  4. jflash烧录教程_Jflash烧录(windows)原理分析
  5. Python实现办公自动化读书笔记——自动化处理Word文档
  6. Xamarin字体设置
  7. java实现解压war_java文件操作之war压缩解压
  8. 基于SSM框架的毕业设计管理系统的设计与实现(附资源下载)
  9. java技术可行性分析_java毕业设计管理系统需求分析
  10. qmc3格式文件转为mp3