标签: pointers

尝试在strcpy之前将空字符添加到char数组的末尾

处理我必须使用的文件中的数据读取到结构中的问题.

该文件是有组织的,以便有一个名称,几行ASCII艺术以#和一个等级终止.这是一个例子

Sample Name
( S )
( S )
# 5
Run Code Online (Sandbox Code Playgroud)

我的结构设置如下:

typedef struct
 {
   char* name;
   char* art;
   int rating;
 }CASE;
Run Code Online (Sandbox Code Playgroud)

当我编译我的源代码时,我不断收到以下警告:

multiple-character character constant
overflow in implicit constant conversion
Run Code Online (Sandbox Code Playgroud)

在这一行上buffer[artCount] = '/0';,artCount是缓冲区本身的strlen.

我只是在字符数组的末尾添加一个空字符来准备strcpy.我的逻辑在这里有什么问题吗?

功能:

/*CASE* all is an empty array of CASE structs*/
void readFile(FILE* FPin, CASE* all)
{
  CASE* walker = all;
  int count = 0;
  int artCount;
  char buffer[160];

  if((FPin = fopen("art.txt", "r")) == NULL)
  {
    printf("Error opening file.");
    exit(100);  
  }

 walker->name = …
Run Code Online (Sandbox Code Playgroud)

c struct pointers

1
推荐指数
1
解决办法
1万
查看次数

将uint8_t*转换为char*以与QIODevice一起使用

我正在修改Qt音频输出示例,如下所示:

  • 我可以从第三方访问音频混音器API.
  • 从该混频器读取数据的方法是 void AudioMixer::ReadData(uint8_t *stream, uint32_t len);
  • 我正在改变以在示例中输出此数据的函数是 qint64 Generator::readData(char *data, qint64 len)

如果我的理解是正确的,我应该能够QIODevice通过重写Generator::readData方法来操作方法来调用AudioMixer::ReadData方法并将其uint8_t*使用的方法转换AudioMixer为a char*来使用QIODevice.

我认为这在某种程度上是可能的吗?如果是这样,有人可以建议如何进行演员表演吗?如果没有,你能解释一下如何输出uint8_t*使用QIODevice

为了完整起见,方法是:

void AudioMixer::ReadData(uint8_t *stream, uint32_t len)
{   
    if(buffer.GetMaximumReadSize() < len)
    {
        memset(stream, 0, len);
    }
    else
    {
        buffer.Read(stream, len);
    }
}
Run Code Online (Sandbox Code Playgroud)

qint64 Generator::readData(char *data, qint64 len)
{
    qint64 total = 0;
    while (len - total > 0) {
        const qint64 chunk = qMin((m_buffer.size() …
Run Code Online (Sandbox Code Playgroud)

c++ io qt buffer pointers

1
推荐指数
1
解决办法
1万
查看次数

C++调用静态函数指针

我想将回调转发给函数指针.所以我声明了一个静态(int*)m_pointer1,以及一个方法void RegisterCallback1((int*)fct)

在class1.h:

public:
   int RegisterCallback1( int (*fct) );
private:
   static int (*m_Callback1);
Run Code Online (Sandbox Code Playgroud)

在class1.cpp中:

int class1::RegisterCallback1( int (*fct) )
{
    m_Callback1= fct;
}
Run Code Online (Sandbox Code Playgroud)

那么,我想将回调转发给函数指针:

void class1::Callback1()
{
   (*m_Callback1)();
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个编译器错误"表达必须有(指针) - 函数类型我已经按照教程和阅读有关函数指针,他们似乎这样做没有任何问题.任何想法为什么?

编辑:所以,我声明(int*)(void)m_Callback1 -Visual Studio需要一个空格......-然后如何用参数调用registerCallback函数?

class1.RegisterCallBack1(  ??? - class2::callback -??? );
Run Code Online (Sandbox Code Playgroud)

c++ static pointers function-pointers

1
推荐指数
2
解决办法
3144
查看次数

c ++通过移动指针在数组中导航

在下面我预计将打印13.
我想通过一个数组成员的大小(即int)来移动arr(这是一个指向内存的指针,其中存储了数组中的int值,如果我理解了一切).

而是打印45.因此,检索第五个Array成员进行一个数组成员范围的跳转.为什么?

int arr[] = {1,13,25,37,45,56};
int val = *( arr + 4 );         //moving the pointer by the sizeof(int)=4
std::cout << "Array Val: " << val << std::endl;
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers

1
推荐指数
1
解决办法
2万
查看次数

引用是否在c ++中被视为指针

引用是否被视为c ++中的指针?

int &x = y;
Run Code Online (Sandbox Code Playgroud)

x在内存中有空格吗?

c++ pointers reference

1
推荐指数
1
解决办法
279
查看次数

数组歧义的基址

以下代码中的cc是否包含数组c的基址,或者它是否包含"Hello"中字母"H"的地址?如果答案是基地址,那么为什么cc在执行cc ++之后不会增加8个字节,因为它应该保持两个指针?

void foo(char *cc[])
{
    printf("%x\n",cc);
    cc++;
    printf("%x\n",cc);
}

int main()
{
    char *c[] = {"Hello","World"};
    foo(c);
}
Run Code Online (Sandbox Code Playgroud)

c c++ arrays pointers

1
推荐指数
1
解决办法
726
查看次数

在C中初始化struct

好的,这是结构的定义:

typedef struct {
   int first;
   int last;
   int count;
   char * Array [50];
} queue;
Run Code Online (Sandbox Code Playgroud)

我使用另一个函数来初始化它

void initialize(queue * ptr){
   ptr=malloc(sizeof(queue));
   ptr->first=0;
   ptr->last=0;
   ptr->count=0;
}
Run Code Online (Sandbox Code Playgroud)

然后我用printf先打印出来,最后打印并计数.这三个都应该是零.然而,我实际得到的是,正如我预期的那样,count是0,但是第一个和最后一个是两个非常大的奇怪数字,并且每次运行程序时它们都会改变.谁能告诉我这里有什么问题?谢谢.

c struct pointers allocation initialization

1
推荐指数
1
解决办法
1492
查看次数

c ++概念帮助,指针

所以我对指针有一个合理的理解,但我被问到这些是什么区别:

void print(int* &pointer)

void print(int* pointer)
Run Code Online (Sandbox Code Playgroud)

我自己还是学生,我不是100%.我很抱歉,如果这是基本但我的googleing技能让我失望.无论如何,你可以帮助我更好地理解这个概念.我很久没有使用过c ++了,我正在努力帮助一个学生,我正在努力为她巩固我的概念知识.

c++ pointers

1
推荐指数
1
解决办法
92
查看次数

要键入的指针数组

由于我的车坏了,我今天错过了我的课.类型的指针数组是否类似于以下内容?

void *ary[10];
ary[0] = new int();
ary[1] = new float();
Run Code Online (Sandbox Code Playgroud)

我仍然有点模糊它是什么.

c c++ arrays types pointers

1
推荐指数
1
解决办法
250
查看次数

静态数组和动态数组

char a[10];
scanf("%s",a);
int i=0;
while(a[i]!='\0')
     printf("\n%c",a[i++]);  //similar to printf("%s",a);               


char *b;
b=malloc(10*sizeof(char));
scanf("%s",b);
i=0;
while((b+i)!='\0')
     printf("\n%c",*(b+i++));   //not similar to printf("%s",a);
Run Code Online (Sandbox Code Playgroud)

对于输入"abcd",第一个循环打印a []是否与printf().但对于*b,情况并非如此.

第二个循环持续太多,直到遇到'\ 0'.

那么,这是否意味着'\ 0'会自动附加在字符串的末尾,而不是在char类型指针的末尾?

它的工作是附加这个'\ 0'?编译器的?

c arrays pointers

1
推荐指数
1
解决办法
971
查看次数