[英]Reverse array with using pointers in C
#include <stdio .h>
#include <stdlib .h>
int main(){
char text1 [N] ;
char reverse [N] ;
char* txtptr = text1 ;
char* revtxtptr = reverse ;
int N;
printf (”\n Enter any text here : ”) ;
scanf(”%s”, text1);
while(N> 0){
txtptr --;
*revtxtptr = *txtptr ;
revtxtptr++;
}
*revtxtptr = ’\0’;
printf (”The reverse text is : %s \n” , reverse) ;
return 0;
}
我想在這里看到 output 輸入的反轉形式。 類似輸入的東西:
CLEARLY
output:
YLRAELC
你能幫我改正我的錯嗎?
以下是對您的代碼的更正:
#include
行中的.h>
之前有空格。txtptr
沒有放在 C 字符串的末尾,但它在while
循環中被遞減。scanf
不限於緩沖區的大小減 1。strlen
查找字符串的大小或遍歷字符串直到找到 '\0'。 (改為前進方向)這是一個將反轉輸入數組(不是就地)的安全代碼:
#include <stdio.h>
#include <stdlib.h>
#define MAXSTR 255
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
int main() {
char text1[MAXSTR + 1];
char revbuf[MAXSTR + 1];
char* txtptr = text1;
char* reverse = revbuf + MAXSTR;
printf("\nEnter any text here : ");
scanf("%" STR(MAXSTR) "s", text1);
*reverse = '\0';
while(*txtptr) {
*--reverse = *txtptr++;
}
printf ("The reverse text is : %s \n" , reverse) ;
return 0;
}
這里有一個用於 int 數組的示例 function。
int *reverseINTarray(int *array, size_t size)
{
int *end, *wrk = array;
if(array && size > 1)
{
end = array + size - 1;
while(end > wrk)
{
int tmp = *wrk;
*wrk++ = *end;
*end-- = tmp;
}
}
return array;
}
或者
int *reverseINTarray(const int *src, int *dest, size_t size)
{
int *wrk = dest;
if(src && dest && size)
{
wrk += size - 1;
while(size--)
{
*wrk-- = *src++;
}
}
return dest;
}
您的“交換兩個字節”邏輯是......只是......錯誤。 這給你任何想法嗎?
char temp;
temp = *chartxtptr;
*chartxtptr = *txtptr;
*txtptr = temp;
如果不使用臨時來保存即將被替換的字節,則不能“交換”任何兩個字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.