我正在从命名管道读取/写入数据.在写作方面,它表示它正在写一个恒定的110字节.在阅读方面,大多数时候它表示它正在读取110个字节,这是正确的,但有时它说它读取220字节或330字节.这是正确的,当我打印出来时,它在同一个read()中连续两次或三次打印出相同的消息.在下面的代码中读取我在memset上做错了什么来清除char?除非在缓冲区遗留一些东西,否则我无法想到它正在阅读的任何其他方式.
int fd1, numread;
char bufpipe[5000];
while(1)
{
fd1 = open("/tmp/testPipe", O_RDONLY);
numread = read(fd1,bufpipe, 5000);//->this should always be 110
if(numread > 1)
{
printf("READ: %i", numread);
bufpipe[numread+1] = '\0';
memset(bufpipe,'\0',5001);
close(fd1);
}
}
Run Code Online (Sandbox Code Playgroud) 我在msdn看这个例子:
http://msdn.microsoft.com/en-us/library/ms894209.aspx
DWORD dwResult;
MEMORY_BASIC_INFORMATION mbiMemory;
// Clear the results structure.
memset (&mbiMemory, 0, sizeof(MEMORY_BASIC_INFORMATION));
dwResult = VirtualQuery (lpPage, // Page to examine
&mbiMemory, // Structure for results
sizeof(MEMORY_BASIC_INFORMATION));
if (sizeof(MEMORY_BASIC_INFORMATION) != dwResult)
{
// Your error-handling code goes here.
}
Run Code Online (Sandbox Code Playgroud)
看起来他们使用memset作为向mbiMemory分配内存的一种方式.好吗?我不会以这种方式跑过一些记忆吗?谢谢!
我有一个变量:
unsigned int* data = (unsigned int*)malloc(height * width)
Run Code Online (Sandbox Code Playgroud)
我想为所有数组值设置相同的int.我不能使用memset,因为它适用于字节.
我怎样才能做到这一点?
#include <stdio.h>
#include <string.h>
int main() {
char* p = new char[10];
memset(p,0,10);
printf("%c",*p);
}
Run Code Online (Sandbox Code Playgroud)
我想memset
设置开始每个字节p
来0
.看到什么都没打印出来,我有点惊讶.究竟发生了memset
什么?
我试图用来memset
设置一个动态的大小数组rownum x rownmum
.但是,当我调用showarr
如下所示的函数时48
,我得到的是随机/垃圾值,而不是获得全零的输出(即ASCII ).
void showarr(int **a, int rownum)
{
for ( int i = 0; i < rownum; i++) {
for ( int j = 0; j < rownum; j++) {
cout<<a[i][j]<<endl;
}
}
}
int main(int argc, char *argv[])
{
int n;
cin>>n;
int rownum;
cin>>rownum;
int **a = new int* [rownum] ;
for ( int i = 0; i <rownum; i++) {
a[i] = new int[rownum];
}
for (int …
Run Code Online (Sandbox Code Playgroud) 我有多个相同长度的数组,我希望用零填充.让我们看看两种方法:
int i;
for(i=0;i<ARRAYSLENGTH;i++){
arr1[i]=0;
arr2[i]=0;
arr3[i]=0;
...
}
Run Code Online (Sandbox Code Playgroud)
memset
所有数组归零.在最近的一次代码审查中,我被要求将选项1更改为选项2.这让我想知道,哪种方法更好?主要是:
2被认为比1更可读吗?
这两种方法在效率方面有何比较?(考虑memset
通常在汇编中实现,但方法1仅为多个数组递增计数器一次).
这是代码
int x, y, n, i, j, l, m, o;
printf ("podaj szerokosc planszy na jakiej chcesz zagrac\n");
scanf ("%d", &x);
printf ("podaj dlugosc planszy na jakiej chcesz zagrac\n");
scanf ("%d", &y);
int plansza [x][y];
memset(plansza, 0, sizeof plansza);
int plansza2 [x][y];
memset(plansza2, 0, sizeof plansza2);
printf("plansza: \n");
for(j=0;j<x;j++)
{
for(l=0;l<y;l++)
{
printf("%d",plansza[x][y]);
printf(" ");
}
printf("\n");
}
printf("plansza2: \n");
for(m=0;m<x;m++)
{
for(o=0;o<y;o++)
{
printf("%d",plansza2[x][y]);
printf(" ");
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
这就是结果:
不知道为什么memset()
根本不起作用,我完全不知道为什么.我应该怎么做才能用零填充数组?
当调用memset时,我对内存中实际发生的事情感到困惑,而当你调用free时会发生什么.
例如,我有一个指向一个char*数组的指针A.
char** A = (char**)calloc(5, sizeof(char*));
int i;
for(i=0;i<5;i++)
{
//filling
A[i] = (char*)calloc(30, sizeof(char));
scanf("%s", &A[i]);
}
Run Code Online (Sandbox Code Playgroud)
现在我想重置它我的char**指针和它指向的所有元素都是完全空的
memset(A, 0, 5);
Run Code Online (Sandbox Code Playgroud)
要么
free(A);
Run Code Online (Sandbox Code Playgroud)
有什么不同?
我对C有点新意,所以请以外行的话说话,谢谢
代码是检查在memset中的memset的工作.memset正确初始化数组0但是当我尝试用10初始化它时,它会用一些非常大的垃圾值初始化数组.那有什么问题?
#include <stdio.h>
#include<string.h>
int main(void)
{
int dp[10008],i;
memset(dp,10,sizeof(dp));
for(i=0;i<10;i++)
printf("%d\n",dp[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我试图清空struct数组中的所有数据.
但事实证明是分段错误.有人可以帮帮我吗.
结构
struct entry
{
char user;
char name[9];
char extension[4];
short blockcount;
short block[8];
};
struct entry directory[128];
Run Code Online (Sandbox Code Playgroud)
主要()
for (int i = 0; i < 128; ++i)
{
memset(&directory[i], 0, sizeof(directory));
}
Run Code Online (Sandbox Code Playgroud)