这是我的主要内容:
int main(void)
{
char w1[] = "Paris";
ChangeTheWord(w1);
printf("The new word is: %s",w1);
return0;
}
我需要在此函数中更改w1[]
的值:
ChangeTheWord(char *Str)
{
...
}
答案 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 :(得分: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回答
答案 2 :(得分:2)
您只需访问每个索引并替换为所需的值即可。 例如,做了一个改变......
void ChangeTheWord(char *w1)
{
w1[0] = 'w';
//....... Other code as required
}
现在,当您尝试在main()
中打印字符串时,输出将为Waris
。
答案 3 :(得分:1)
您实际上可以使用循环中的指针表示法更改每个索引的值。有点像...
map.autoresizesSubviews = false
或者您应该能够对索引进行硬编码
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';
答案 4 :(得分:0)
这就是你可以做到的。
ChangeTheWord(char *Str)
{
// changes the first character with 'x'
*str = 'x';
}