我来自Python,最近学习C ++。我正在学习一个名为C / C ++的函数,memset并从https://www.geeksforgeeks.org/memset-in-cpp/网站中遵循在线示例,在该示例中我遇到了一些编译错误:
/**
* @author : Bhishan Poudel
* @file : a02_memset_geeks.cpp
* @created : Wednesday Jun 05, 2019 11:07:03 EDT
*
* Ref:
*/
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int main(int argc, char *argv[]){
char str[] = "geeksforgeeks";
//memset(str, "t", sizeof(str));
memset(str, 't', sizeof(str));
cout << str << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用单引号't'时出错
这将打印多余的字符。
tttttttttttttt!R@`
Run Code Online (Sandbox Code Playgroud)
在双引号中使用“ t”时出错
tttttttttttttt!R@`
Run Code Online (Sandbox Code Playgroud)
如何在C ++中使用memset?
进一步的研究此处
提供了具有缺点的优秀教程memset:https : //web.archive.org/web/20170702122030/https …
可能的重复:
C:指针和数组之间的
差异结果的大小不同
基本上,我这样做了......
char *str1 = "Sanjeev";
char str2[] = "Sanjeev";
printf("%d %d\n",strlen(str1),sizeof(str1));
printf("%d %d\n",strlen(str2),sizeof(str2));
Run Code Online (Sandbox Code Playgroud)
我的输出是
7 4
7 8
Run Code Online (Sandbox Code Playgroud)
我无法说明原因为sizeof str14.请解释这些之间的区别.
解释sizeof如何确定字符串的长度.
#include<stdio.h>
int main()
{
char str[] = "Sasindar\0Baby\0";
printf("%d\n", sizeof(str));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我没有很长时间接触C语言.我有一些与中文单词和strncpy有关的问题.
char* testString = "????"
sizeof(testString) => it prints out 4.
strlen(testString) => it prints out 10.
Run Code Online (Sandbox Code Playgroud)
当我想复制到另一个char数组时,我有一些问题.
char msgArray [7];/*这只是一个例子.由于某些限制,我们限制了缓冲区大小.*/
如果我想复制数据,我需要检查
if (sizeof(testString) < sizeof(msgArray)) {
strncopy(msgArray, testString, sizeof(msgArray));
}
Run Code Online (Sandbox Code Playgroud)
它会有问题.结果是它只会复制部分数据.
实际上它应该与之相比
if (strlen(testString) < sizeof(msgArray)) {
}
else {
printf("too long");
}
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么会这样.
如果我想定义限制字符数(包括unicode(例如中文字符),我如何实现定义数组?我想我不能使用char []数组.
非常感谢所有回复.
我的解决方案解决方案:我最终决定剪切字符串以满足有限的字节.