处理我必须使用的文件中的数据读取到结构中的问题.
该文件是有组织的,以便有一个名称,几行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) 我正在修改Qt音频输出示例,如下所示:
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) 我想将回调转发给函数指针.所以我声明了一个静态(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) 在下面我预计将打印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) 以下代码中的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) 好的,这是结构的定义:
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,但是第一个和最后一个是两个非常大的奇怪数字,并且每次运行程序时它们都会改变.谁能告诉我这里有什么问题?谢谢.
所以我对指针有一个合理的理解,但我被问到这些是什么区别:
void print(int* &pointer)
void print(int* pointer)
Run Code Online (Sandbox Code Playgroud)
我自己还是学生,我不是100%.我很抱歉,如果这是基本但我的googleing技能让我失望.无论如何,你可以帮助我更好地理解这个概念.我很久没有使用过c ++了,我正在努力帮助一个学生,我正在努力为她巩固我的概念知识.
由于我的车坏了,我今天错过了我的课.类型的指针数组是否类似于以下内容?
void *ary[10];
ary[0] = new int();
ary[1] = new float();
Run Code Online (Sandbox Code Playgroud)
我仍然有点模糊它是什么.
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'?编译器的?