2015-06-05 34 views
-4

我是C新手,我很難理解如何使用指針調用方法。目前,該代碼應該扭轉空值終止字符串,但我得到的錯誤 C指針和調用方法?

main.c:8:12: error: use of undeclared identifier 'sas' 
     char* N = sas; 
       ^main.c:10:10: warning: incompatible integer to pointer conversion passing 'char' to parameter of type 
     'char *'; remove * [-Wint-conversion] 
     reverse(*N); 
       ^~ ./header.h:3:27: note: passing argument to parameter 'N' here EXTERN void reverse(char *N); 

我實際的代碼是這樣的: 主營:

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

int main(int argc, char *argv[]) 
{ 
    char* N = sas; 
    reverse(*N); 
} 

反向:

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

void reverse(char *str) 
{ 
    char* end = str; 
    char temp; 
    printf("this is *str: %c\n", *str); 
    if (str) 
    { 
     while (*end) 
     { 
      ++end: 
     } 
     end--; 
     while (str < end) 
     { 
      temp = *str 
      *str++ = *end; 
      *end-- = temp; 
     } 
    } 
} 

header.h:

#define EXTERN extern 
EXTERN void reverse(char *N) 

感謝您的幫助和時間!

+1

1.請選擇更好的編碼風格,這種風格很難遵循,2.什麼是'sas'?你想做什麼? 3.你的代碼有幾個不編譯的原因,例如你有'++結束:'???還有很多明顯不需要的關閉'}'大括號,儘管我懷疑你可能遺漏了代碼。 –

+2

你可能需要'char * N =「sas」;'(一個字符串),你應該調用'reverse(N)'。那麼你只會因爲字符串不可修改而崩潰。所以,實際上,你需要'char N [] =「sas」;'。當然,很難發現原始字符串和反向字符串之間的區別。你可能應該用'char N [] =「xyz」;'或其他不對稱的東西來測試。你正在'reverse()打印'打印一個字符,而不是整個字符串。你應該在'main()'中打印'after'字符串。否則,你將不知道你的代碼是否做出了正確的改變。 –

+0

'reverse()'沒有塊。請發佈完整的代碼,分解到相關部分。 – Olaf

回答

-3

據我所知,你正試圖扭轉一個字符串。這只是對你的代碼的輕微修改。

全部來源:

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

void reverse(char *N); 

int main(int argc, char *argv[]) 
{ 
    char strSas[] = "sas"; 
    reverse(strSas); 
} 

void reverse(char *str) 
{ 
    char* end = str; 
    char temp; 
    if(str) {  
    printf("this is *str: %c\n", *str); 
    while(*end) { 
     ++end; 
    } 
    end--; 
    while(str < end) { 
     temp = *str; 
     *str = *end; 
     *end = temp; 

     ++str; 
     --end; 
    } 
    } 
} 
+1

'reverse(* N)'不會編譯,因爲'reverse()'需要'char *'。 –

+0

我更新了修復程序。 –

+3

請注意,嘗試反轉字符串文字(常量字符串)可能會崩潰。 –

1

首先,有是那塊代碼中的許多語法錯誤: 'SAS' 那是什麼

  1. ?你的編譯器認爲它是一個變量,但找不到那個名字。如果你想把一個 「SAS」 的字符串,然後:

    char* N = "sas"; 
    
  2. 不一致的括號內。更多的右括號比打開的括號,並且在聲明你的功能後沒有開口括號。

1
int main(int argc, char *argv[]) 
{ 
    char* N = "sas"; 
    reverse(*N); 
} 

首先你要N指向一個字符串常量。然後你試着將N指向什麼。但是因爲N指向一個字符串常量,所以你試圖反轉一個字符串常量。根據定義,常量不能改變它們的值。