2013-05-20 122 views
-1

我在爲char指針賦值時遇到了問題。c字符指針賦值

#include<stdio.h> 

int main(int argc, char* argv[]){ 
    char line[200], *p, q; 
    int i=0; 
    FILE* f=fopen(argv[1], "r"); 
    for(; ;){ 
      p=fgets(line, 200, f); 
      if (p==NULL) break; 
      printf("%s", p); 
      i=0; 
      while(p[i]!='\n'){ 
        if (p[i]=='a') p[i]='A'; 
        i++; 
      } 
      printf("%s", p); 

    } 
} 

我知道,行

p[i]='A'; 

不起作用,但這就是我基本上需要做的,用char替換char*p需要是char*,因爲fgets()會返回該值。我的問題是,如果我能以某種方式將char*轉換爲char[],或者如果有方法將值分配給char*

+2

'P [i] ='A''應工作(假設你期望它將char數組的元素i設置爲'A')。你看到什麼問題? – simonc

+0

爲什麼它不能工作?它對我來說看起來非常好。 –

+0

「我知道,'p [i] ='A'這行'不起作用' - 它在什麼意義上行不通?你怎麼知道它不起作用? – 2013-05-20 14:03:51

回答

4

您的代碼完美地工作。首先得有個基本的情況下,給定的輸入文件,如:(後 'd' 「ENTER」 鍵)

ABCD

和1個換行符程序輸出到控制檯:

ABCD
ABCD

這是你究竟是如何編碼的。它會不是Abcd回到文件,因爲你只打開文件閱讀,而不是寫作。希望這不是你想要的。

注意:如果您的文件中沒有換行符,或者從一開始就超過200個字符,您可能會看到緩衝區溢出,這可能導致它看起來不起作用。所以,再次,從我展示的一個非常基本的文件開始,並確保您的代碼是正好你在這裏發佈。


> I know, that the line P [I] = 'A';不工作,

  • 不正確的,你可以使用指針數組p或陣列本身line訪問和更改的元素。 fgets()將前200個字符(或直到第一個換行符)存儲到line中,並將指向它的指針返回給您分配給p的任一位,這兩個字符將用於訪問或更改數組中的字符。

> I ... need to ..., replace a char* with a char

  • 這是不是你在這裏做什麼。您使用的是char *p訪問陣列並更改char'a''A'

> p needs to be a char* because fgets() returns that.

  • 其實fgets()給你兩件事情,它填補和 「返回」 你的陣列( line),並且它還返回一個char *到你的填充數組。所以,不,你不需要使用p可言,下面,相同的代碼工作沒有指針都:


int main(int argc, char* argv[]){ 
    char line[200]; 
    int i=0; 
    FILE* f=fopen("test.txt", "r"); 
    for(; ;){ 
      if (fgets(line, 200, f)==NULL) break; 
      printf("%s", line); 
      i=0; 
      while(line[i]!='\n'){ 
        if (line[i]=='a') line[i]='A'; 
        i++; 
      } 
      printf("%s", line); 

    } 
    return 0; 
} 
+0

這工作正常,謝謝。 – user1796659