2014-03-06 46 views
0

這是我的主:如何更改char指針的值?

int main(void) 
{ 
    char w1[] = "Paris"; 
    ChangeTheWord(w1); 
    printf("The new word is: %s",w1); 
    return0; 
} 

,我需要改變這個函數的w1[]值:

ChangeTheWord(char *Str) 
{ 

    ... 

} 
+3

'w1'是一個數組,而不是一個指針。你想改變數組的_contents_嗎? –

+1

'strcpy(Str,「Rome」);' – ouah

+0

@CharlesBailey是的,我想改變arry的內容。 – benhi

回答

3
int main() 
{ 
    char w1[]="Paris"; 
    changeWord(w1);  // this means address of w1[0] i.e &w[0] 
    printf("The new word is %s",w1); 
    return 0; 

} 
void changeWord(char *str) 
{ 
    str[0]='D';   //here str have same address as w1 so whatever you did with str will be refected in main(). 
    str[1]='e'; 
    str[2]='l'; 
    str[3]='h'; 
    str[4]='i'; 
} 

this答案太

+0

爲什麼投票?,長度「巴黎」==長度「德里」 –

+0

@Chauhan抱歉,我不明白這裏提到的長度有什麼重要意義? –

+1

,因爲'w1 []'的大小與「巴黎」的大小相等,等於「德里」的大小 - 您無法指定「新德里」,它會導致未定義的行爲 –

2

你可以簡單地訪問每個指標,並與所需的值替換.. 一個製造改變例如...

void ChangeTheWord(char *w1) 
{ 
    w1[0] = 'w'; 
    //....... Other code as required 
} 

現在當您嘗試打印字符串在main()輸出將是Waris

+0

否該函數是「 void ChangeTheWord(char * Str)「 – benhi

+0

@benhi yes'ChangeTheWord'不返回,但改變你的數組。你將數組'w1'的地址傳遞給你的函數。 –

+0

在'C'中寫'void'是多餘的......我想我有這個習慣會讓事情變得更加清晰......參數的名字也沒有關係...... – HadeS

0

這是你如何做到的。

ChangeTheWord(char *Str) 
{ 
     // changes the first character with 'x' 
     *str = 'x'; 

} 
+0

好吧,第二個......? – benhi

+0

你的意思是第二個字符? –

7

所有的答案至今是正確的,但IMO不完整的。

在處理C中的字符串時,避免緩衝區溢出非常重要。

如果ChangeTheWord()試圖將單詞更改爲太長,則程序崩潰(或至少顯示未定義的行爲)。

更好地做到這一點:

#include <stdio.h> 
#include <stddef.h> 

void ChangeTheWord(char *str, size_t maxlen) 
{ 
    strncpy(str, "A too long word", maxlen-1); 
    str[maxlen] = '\0'; 
} 

int main(void) 
{ 
    char w1[] = "Paris"; 
    ChangeTheWord(w1, sizeof w1); 
    printf("The new word is: %s",w1); 
    return 0; 
} 

通過這一解決方案,該功能被告知它被允許訪問的內存大小。

請注意,strncpy()不起作用,因爲人們一眼就會懷疑:如果字符串太長,則不會寫入NUL字節。所以你必須自己照顧。

1

實際上,您可以使用指針表示法在循環中更改每個索引的值。喜歡的東西...

int length = strlen(str);    // should give length of the array 

for (i = 0; i < length; i++) 
    *(str + i) = something; 

,或者你應該能夠只是硬編碼索引

*(str + 0) = 'x'; 
    *(str + 1) = 'y'; 

,或者使用數組表示法

str[0] = 'x'; 
str[1] = 'y';