Merhaba,
Main içerisinde deviceInıt adlı fonksiyona drv adlı struct pointeri parametre olarak geçmek istiyorum ve ilgili fonksiyon içerinde drv2 adlı struct pointera parametreleri atamak istiyorum. drv2->deviceName ve dInfo->deviceName boş gözüküyor.Nasıl yapabilirim ?
main.c içerisinde
struct deviceInfo{
int a;
int b;
char *deviceName;
}deviceInfo;
struct deviceInfo *drv;
int main()
{
drv->deviceName="deviceABC";
deviceInıt(drv);
}
----------------------------------------------------------------
init.c içerisinde ;
struct deviceInfo *drv2;
int deviceInıt(struct deviceInfo *dInfo)
{
memcpy (drv2->deviceName,dInfo->deviceName,strlen(dInfo->deviceName)+1);
}
Alıntı yapılan: sımışka - 17 Nisan 2019, 14:36:46Merhaba,
Main içerisinde deviceInıt adlı fonksiyona drv adlı struct pointeri parametre olarak geçmek istiyorum ve ilgili fonksiyon içerinde drv2 adlı struct pointera parametreleri atamak istiyorum. drv2->deviceName ve dInfo->deviceName boş gözüküyor.Nasıl yapabilirim ?
main.c içerisinde
struct deviceInfo{
int a;
int b;
char *deviceName;
}deviceInfo;
struct deviceInfo *drv;
}
1- deviceInfo struct ile tekrar deviceInfo tanımlanmıyor bildiğim kadarıyla
struct deviceInfo{
int a;
int b;
char *deviceName;
}devInfo;
Şeklinde olabilir.
2-
struct deviceInfo *drv;
yerine
devInfo *drv;
gibi tanımlanır şeklinde hatırlıyorum.
3- atama yaparken strcpy(devInfo.deviceName,"abc") şeklinde olmalı
enum sabitler{
cHWID,
cSWVersion,
cHwR,
mfc, //manifacturer
};
typedef struct hw_strings{
u8 sbt;
char str[20];
}myHwStrings;
myHwStrings const deviceData[10]={
cHWID,{"FD.RAL.MCU.R01"},
cSWVersion,{"1.0.0"},
cHwR,{"1.0.1"},
mfc,{"FiDeNet UKoSis"},
};
yapmak istediğin iş için ben bu yapıyı kullanıyorum.
Başka yöntem illaki vardır. Bilen abiler yazarsa ben de öğrenmiş olurum.
yok kullanılır.
Ayrıca struct_name *ptr için ;
typedef struct struct_name {
...
}
typedef anahtarını kullanmak lazım.
Benim sorum ; string bir değeri struct pointer ile bir fonksiyona geçmek.
Yapmak istediğiniz doğru anladığımdan emin değilim ama drv pointer'ını tanımladıktan sonra o pointer'a herhangi bir deviceInfo tipindeki struct değişkenin adresini vermelisiniz.
Main içinde ilk satıra drv = &deviceInfo; olarak eklerseniz çalışacaktır.
Struct için hiç bellek ayırmamışsınız, sadece pointer tanımlamışsınız.
Alıntı yapılan: Cemre. - 17 Nisan 2019, 15:26:06Yapmak istediğiniz doğru anladığımdan emin değilim ama drv pointer'ını tanımladıktan sonra o pointer'a herhangi bir deviceInfo tipindeki struct değişkenin adresini vermelisiniz.
Main içinde ilk satıra drv = &deviceInfo; olarak eklerseniz çalışacaktır.
içi doldurulan deviceInfo tipinde drv adlı struct pointeri bir fonksiyona parametre olarak geçmek , deviceInfo tipinde drv2 adlı struct pointera atamak istiyorum. sorun olan kısım char*devicename üyesi. içi boş geliyor.
@brandice5 drv2->deviceName= malloc(strlen(drvInfo)+1); olarak yer tahsisi yapıyorum. Yine boş gösteriyor.
Tamamdır çözdüm teşekkür ederim.
Cevap;
Yukarıda anlattığım kurguda init.c içerisinde bulunan ;
struct deviceInfo *drv2;
int deviceInıt(struct deviceInfo *dInfo)
{
memcpy (drv2->deviceName,dInfo->deviceName,strlen(dInfo->deviceName)+1);
}
fonksiyon içerisine ;
drv2=(struct deviceInfo *) malloc(sizeof(struct deviceInfo));
drv2->deviceName=(char*)malloc(strlen(dInfo->deviceName)+1);
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int a;
int b;
char *deviceName;
} deviceInfo;
deviceInfo *drv;
deviceInfo *drv2;
void deviceInit(deviceInfo *dInfo)
{
drv2 = (deviceInfo*)malloc(sizeof(deviceInfo));
drv2->deviceName = (char*)malloc(strlen(dInfo->deviceName)+1);
strcpy(drv2->deviceName , dInfo->deviceName);
printf("drv2->deviceName in fucntion = %s\n", drv2->deviceName);
}
int main()
{
char *text = "deneme";
drv = (deviceInfo*)malloc(sizeof(deviceInfo));
drv->deviceName = (char*)malloc(sizeof(text));
strcpy(drv->deviceName , text);
printf("drv->deviceName = %s\n", drv->deviceName);
deviceInit(drv);
printf("drv2->deviceName in main = %s\n", drv2->deviceName);
}