VC++下的字符指针长度问题

VC++下的字符指针长度问题,第1张

s = (char ) malloc(sizeof(char));

只给s分配了1个字节。sizeof(char))=1

s = (char ) malloc(sizeof(char));

int n = strlen(s);

s没有内容却去测量它的字符串长度~~~

别说n=16任何值都有可能,因为strlen是靠null结尾的字符串工作的。

s = strcpy(s, str);

s只有一个字节,你却向s写入9个字节,大错啊!

msdn对strlen和strcpy函数解释

strlen:returns the number of characters in str, excluding the terminal NULL

strcpy:The strcpy function copies strSource, including the terminating null character, to the location specified by strDestination The behavior of strcpy is undefined if the source and destination strings overlap

我在不同的时候在不同的程序里s = (char ) malloc(sizeof(char));

int n = strlen(s);

n还是16

这可能和 *** 作系统虚拟空间和malloc算法有关,可能malloc每回的地址都是一样的,而在16个字节后都有一个null。对你的问题没有讨论的意义,因为可能放到其它平台上或使用另外的malloc算法,这些结果都没有准确的定义。讨论错误的结果是没有意义,没有学习价值!如果你对内存申请分配有浓厚的兴趣,可以直接看malloc源代码。

length = m_DataGetLength();

就是字符串长度。

如果m_Data是编辑框关联字符串变量,那么在调用之前最好加上语句:

UpdateDate(TRUE);//更新控件变量值

另外,length是一个UCHAR,最大只有255,并不是很安全,建议定义为int

#include <stdioh>

#include <stringh>

int main()

{

char str[256];

while(1){/无限循环/

scanf("%s", str);/读取一个单词/

printf("%d", strlen(str));

if(getchar()=='\n') break;/看后面是换行符就结束/

printf(",");/不是换行符就打个逗号/

}

printf("\n");

return 0;

}

以上就是关于VC++下的字符指针长度问题全部的内容,包括:VC++下的字符指针长度问题、关于vc++的CString类获取字符长度问题、VC++中怎么求单词的长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9746688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存