如何更改char指针的值?

时间:2014-03-06 09:19:00

标签: c arrays pointers

这是我的主要内容:

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

我需要在此函数中更改w1[]的值:

ChangeTheWord(char *Str)
{

     ...

}

5 个答案:

答案 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';

}