I am trying to register to the address I sent to the function in the code structure you see below. But the for loop itself adds something. It only does this on arrays of 11 elements. That is, if "Hasan Polat" comes, he adds it, but if "Hasann Polat" comes, he does not add it. Or anything other than any 11 element array.printf output is written next to it
void sezarSifreleme(char cumle[], int kaydirma, char *sifreliCumle) {
char alfabe[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int i,j, cumleUzunluk = strlen(cumle);
for(i=0; i < cumleUzunluk; i ) {
if(cumle[i]==' ') {
cumle[i] = ' ';
} else {
for(j=0;j < 26; j ){
if(cumle[i] == alfabe[j]){
j = j kaydirma;
j = j % 26; // Sezar sifrelemede sona geldikten sonra basa donulur onu saglamak amacli 26'ya mod aliriz.
cumle[i] = alfabe[j];
break;
}
}
}
printf("**");
// Sonucu main fonk icerisine gondermek icin aldigimiz degisken adresine sifreledigimiz cumleyi atiyoruz
for(i=0; i < cumleUzunluk; i ) {
sifreliCumle[i] = cumle[i];
printf("%c", sifreliCumle[i]); // **mfxfs utqfy**
}
printf("**");
printf("??%s??", sifreliCumle); // ??mfxfs utqfy??
}
CodePudding user response:
Taking into account these two outputs: one with the fixed number of characters cumleUzunluk in the for loop
printf("**");
// Sonucu main fonk icerisine gondermek icin aldigimiz degisken adresine sifreledigimiz cumleyi atiyoruz
for(i=0; i < cumleUzunluk; i ) {
sifreliCumle[i] = cumle[i];
printf("%c", sifreliCumle[i]); // **mfxfs utqfy**
}
printf("**");
and other with using the conversion specifier s
printf("??%s??", sifreliCumle); // ??mfxfs utqfy??
it means that at least the pointer sifreliCumle does not point to a string.
You could rewrite this call of printf the following way
printf("??%.*s??", cumleUzunluk, sifreliCumle);
or append the zero character '\0' provided that the array pointed to by the pointer sifreliCumle have a space to store the zero character '\0' as for example
sifreliCumle[cumleUzunluk] = '\0';
printf("??%s??", sifreliCumle);
CodePudding user response:
I don't know what your code is doing, but I see that you have this routine:
void sezarSifreleme(char cumle[], int kaydirma, char *sifreliCumle)
and it is defined as having a void return. I see you maninpulating the pointers inside the routine, but none are remained modified outside the routine unless you either use pointer to pointers are you return the pointer in function signature.
char * sezarSifreleme(char cumle[], int kaydirma, char *sifreliCumle)
...
return sifreliCumle;
What is that anyway? Signed Integer, free, li cumulative, little endian?
