這是我的主:如何更改char指針的值?
int main(void)
{
char w1[] = "Paris";
ChangeTheWord(w1);
printf("The new word is: %s",w1);
return0;
}
,我需要改變這個函數的w1[]
值:
ChangeTheWord(char *Str)
{
...
}
這是我的主:如何更改char指針的值?
int main(void)
{
char w1[] = "Paris";
ChangeTheWord(w1);
printf("The new word is: %s",w1);
return0;
}
,我需要改變這個函數的w1[]
值:
ChangeTheWord(char *Str)
{
...
}
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答案太
爲什麼投票?,長度「巴黎」==長度「德里」 –
@Chauhan抱歉,我不明白這裏提到的長度有什麼重要意義? –
,因爲'w1 []'的大小與「巴黎」的大小相等,等於「德里」的大小 - 您無法指定「新德里」,它會導致未定義的行爲 –
你可以簡單地訪問每個指標,並與所需的值替換.. 一個製造改變例如...
void ChangeTheWord(char *w1)
{
w1[0] = 'w';
//....... Other code as required
}
現在當您嘗試打印字符串在main()
輸出將是Waris
。
這是你如何做到的。
ChangeTheWord(char *Str)
{
// changes the first character with 'x'
*str = 'x';
}
好吧,第二個......? – benhi
你的意思是第二個字符? –
所有的答案至今是正確的,但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字節。所以你必須自己照顧。
實際上,您可以使用指針表示法在循環中更改每個索引的值。喜歡的東西...
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';
'w1'是一個數組,而不是一個指針。你想改變數組的_contents_嗎? –
'strcpy(Str,「Rome」);' – ouah
@CharlesBailey是的,我想改變arry的內容。 – benhi