s = (char ) malloc(sizeof(char));
只给s分配了1个字节。sizeof(char))=1
s = (char ) malloc(sizeof(char));
int n = strlen(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++中怎么求单词的长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)