Dlaczego funkcja nie działa?

0
 #include<stdio.h>
#include<stdlib.h>

char ciag[]="1234";
char *perm;
char P4W8(char *ciag)
{
	return ciag[3]&ciag[0]&ciag[1]&ciag[2]&ciag[1]&ciag[2]&ciag[3]&ciag[0];
}

int main(){
	char *perm=(char*)malloc(sizeof(*perm)*8);
	*perm=P4W8(ciag);
	puts(perm);
system("pause");
return 0;
}

Dlaczego po skompilowaniu się, wyświetlają sie dziwne znaki, gdzie tkwi błąd.

2

gdzie tkwi błąd.

W tym, ze wyciagasz losowe wartosci. Zle spojrzalem.

Ta funkcja zwraca 48, co jako char jest rowne 0, wiec jest wyswietlane 0. (Przynajmniej kiedy masz czysty stos, bo puts leci az do '\0', wiec pewnie widzisz 0<jakies smieci="smieci">)

Glos sumienia: Ten kod wyglada strasznie.

0

U mnie dziala dobrze, ale jakbym mial strzelac to bym zamienil: sizeof(*perm) -> sizeof(char)

1

Sądzę że miałeś na myśli coś takiego:

#include<stdio.h>
#include<stdlib.h>

char *P4W8(char *ciag)
  {
    char *perm=(char*)malloc(9),*p=perm; // 9 bo ze znakiem końca
    *(p++)=ciag[3];
    *(p++)=ciag[0];
    *(p++)=ciag[1];
    *(p++)=ciag[2];
    *(p++)=ciag[1];
    *(p++)=ciag[2];
    *(p++)=ciag[3];
    *(p++)=ciag[0];
    *p=0; // to właśnie znak końca
    return perm;
  }
 
int main()
  {
   char *perm=P4W8("1234");
   puts(perm);
   free(perm);
   //system("pause"); // jeżeli tego potrzebujesz to zmień lepiej IDE na jakieś z tego tysiąclecia.
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1