Struct pointer problem

Başlatan sımışka, 17 Nisan 2019, 14:36:46

sımışka

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);

}




fide

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.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

sımışka

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.



Cemre.

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.

brandice5

Struct için hiç bellek ayırmamışsınız, sadece pointer tanımlamışsınız.

sımışka

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.

sımışka

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);

brandice5

#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);
   
}