Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: sımışka - 17 Nisan 2019, 14:36:46

Başlık: Struct pointer problem
Gönderen: sımışka - 17 Nisan 2019, 14:36:46
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);

}



Başlık: Ynt: Struct pointer problem
Gönderen: fide - 17 Nisan 2019, 14:48:09
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.
Başlık: Ynt: Struct pointer problem
Gönderen: sımışka - 17 Nisan 2019, 15:15:40
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.


Başlık: Ynt: Struct pointer problem
Gönderen: Cemre. - 17 Nisan 2019, 15:26:06
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.
Başlık: Ynt: Struct pointer problem
Gönderen: brandice5 - 17 Nisan 2019, 15:31:57
Struct için hiç bellek ayırmamışsınız, sadece pointer tanımlamışsınız.
Başlık: Ynt: Struct pointer problem
Gönderen: sımışka - 17 Nisan 2019, 15:41:57
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.
Başlık: Ynt: Struct pointer problem
Gönderen: sımışka - 17 Nisan 2019, 15:55:13
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);
Başlık: Ynt: Struct pointer problem
Gönderen: brandice5 - 17 Nisan 2019, 16:05:36
#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);
   
}