我在将 char 指针发送到函数并在 C 中为其赋值时遇到问题
I'm having a problem with sending a char pointer to a function and assigning a value to it in C
我正在尝试注册到我发送给您在下面看到的代码结构中的函数的地址。但是 for 循环本身增加了一些东西。它只对 11 个元素的数组执行此操作。也就是如果"Hasan Polat"
来了,他就加,如果"Hasann Polat"
来了,他就不加。或者除任何 11 元素 array.printf 输出之外的任何内容都写在它旁边
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??
}
我不知道你的代码在做什么,但我看到你有这个例程:
void sezarSifreleme(char cumle[], int kaydirma, char *sifreliCumle)
并且它被定义为具有空值 return。我看到你在例程中操纵指针,但是 none 在例程之外仍然被修改,除非你使用指向指针的指针是你 return 函数签名中的指针。
char * sezarSifreleme(char cumle[], int kaydirma, char *sifreliCumle)
...
return sifreliCumle;
那到底是什么?有符号整数,自由,累积,小端?
考虑到这两个输出:一个在 for 循环中具有固定数量的字符 cumleUzunluk
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("**");
和其他使用转换说明符 s
printf("??%s??", sifreliCumle); // ??mfxfs utqfy??
说明至少指针sifreliCumle
不指向字符串
您可以按以下方式重写 printf
的调用
printf("??%.*s??", cumleUzunluk, sifreliCumle);
或附加零字符'[=18=]'
,前提是指针sifreliCumle
指向的数组有一个space来存储零字符'[=18=]'
,例如
sifreliCumle[cumleUzunluk] = '[=13=]';
printf("??%s??", sifreliCumle);
我正在尝试注册到我发送给您在下面看到的代码结构中的函数的地址。但是 for 循环本身增加了一些东西。它只对 11 个元素的数组执行此操作。也就是如果"Hasan Polat"
来了,他就加,如果"Hasann Polat"
来了,他就不加。或者除任何 11 元素 array.printf 输出之外的任何内容都写在它旁边
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??
}
我不知道你的代码在做什么,但我看到你有这个例程:
void sezarSifreleme(char cumle[], int kaydirma, char *sifreliCumle)
并且它被定义为具有空值 return。我看到你在例程中操纵指针,但是 none 在例程之外仍然被修改,除非你使用指向指针的指针是你 return 函数签名中的指针。
char * sezarSifreleme(char cumle[], int kaydirma, char *sifreliCumle)
...
return sifreliCumle;
那到底是什么?有符号整数,自由,累积,小端?
考虑到这两个输出:一个在 for 循环中具有固定数量的字符 cumleUzunluk
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("**");
和其他使用转换说明符 s
printf("??%s??", sifreliCumle); // ??mfxfs utqfy??
说明至少指针sifreliCumle
不指向字符串
您可以按以下方式重写 printf
的调用
printf("??%.*s??", cumleUzunluk, sifreliCumle);
或附加零字符'[=18=]'
,前提是指针sifreliCumle
指向的数组有一个space来存储零字符'[=18=]'
,例如
sifreliCumle[cumleUzunluk] = '[=13=]';
printf("??%s??", sifreliCumle);