Erebus_22 Ответов: 2

Ошибка несовместимого типа


#include<windows.h>
#include<stdio.h>
#include <ctype.h>
typedef struct ret
{
	long long memory;
	char* drive;
};
int main()
{
	struct ret total_memory;
	total_memory=size_show(GetLogicalDrives());
	return 0;
}
struct ret size_show(long int  n ) 
{
	struct ret to_func;
	long long ii;
	long int  i, k, andmask;
	char a[5]="E://";
	char c;
	printf("%d",strlen(a));
	printf("drives available\n");   
	for ( i = 32 ; i >= 0 ; i-- )  
	{   
		andmask = 1 << i;   
		k = n & andmask;
		if(k!=0)
		{
			k=i+65;
			printf("%c:\n",k);
		}
	}
	printf("drive you want to clear\n");
	scanf("%c",&c);
	a[0]=toupper(c);
	printf("%s.\n",a);
	printf("%d\n",strlen(a));
	i=strcmp("E://",a);
	printf("%d",i);
	k=GetDiskFreeSpaceEx(a,NULL,NULL,&ii);
	printf("%ld",k);
	printf("%ld",ii);
	to_func.memory=ii;
	strcpy(to_func.drive,a);
	return to_func;
} 


Я не могу понять, в чем проблема вышеприведенного кода, я хочу, чтобы из функции возвращались два значения, поэтому я использую структуру, я ожидал предупреждений в коде, а не ошибок.
Заранее спасибо за вашу помощь

Что я уже пробовал:

Я попробовал изменить типы данных

2 Ответов

Рейтинг:
7

Richard MacCutchan

    struct ret to_func;
// ...
    strcpy(to_func.drive,a);

Вы объявляете свою структуру в верхней части функции size_show, но вы никогда не инициализируете его. Поэтому, когда вы пытаетесь скопировать что-то в to_func.drive это не удается, потому что у вас есть неинициализированный указатель.

Кроме того, ваши спецификации привода неверны, вы используете двойную косую черту вперед вместо обратной косой черты, должно быть "E:\\".

И это поможет, если вы скажете нам, какая строка кода дает ошибку.


Erebus_22

спасибо, что все разрешилось.
проблема, с которой я сталкиваюсь, связана с GetDiskFreeSpaceEx, который дает неправильный размер диска, мой диск D-это дисковод, но функция все еще показывает доступное пространство на диске, почему это так

Richard MacCutchan

Извините, я не понимаю. То GetDiskFreeSpaceEx функция[^] должен показывать доступное пространство.

Erebus_22

Спасибо это была внутренняя ошибка

Рейтинг:
12

Patrice T

Функция не может вернуть структуру, в лучшем случае она может вернуть указатель на структуру.
Во-вторых, эта структура не может быть создана на стеке, как вы это сделали.
Вот вам несколько лекций:
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity-да.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]