gpt4 book ai didi

c - 函数中的字符串在 C 中不被修改

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:11 24 4
gpt4 key购买 nike

我正在尝试编写一个接收字符串作为参数然后完全修改它的函数:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void updatePEP(char **pep_, int v){
if((v == 0)){
//pep_[0] = '1';
//strncpy(pep_[0],"1", 2);
strncpy(*pep_,"10", 2);
//*pep_ = "10";
}
else if((v < 0)){
strncpy(*pep_,"01", 2);
}
}

int main(){

char *PEP = "00";
int i = 0, j = -1;

printf("%s\n",PEP);

updatePEP(&PEP,i);
printf("%s\n",PEP);

updatePEP(&PEP,j);

printf("%s\n",PEP);

return 0;
}

我已经在互联网上搜索过了,我相信我正确地传递了字符串作为引用,所以我怀疑我是否使用:

pep_[0] = '1';
strncpy(pep_[0],"1", 2);
strncpy(*pep_,"10", 2);
*pep_ = "10";

为什么?(但是它们都不起作用,所以它们也可能是错误的......)

最佳答案

您不能修改字符串文字,根据定义它是 const(只读),因此您的程序具有未定义的行为

您可以改用字符数组:

char PEP[] = "00";

并将此缓冲区传递给您的函数,该函数可以接受此数组作为参数(它将衰减为指向第一个元素的指针)。

此外,你在 updatePEP 中有错别字,你应该检查 if (v==0):

请注意,该函数需要一个 char*(因此您可以直接用数组调用它),而不是 char**

void updatePEP(char *pep_, int v)
{
if (v == 0){
strncpy(pep_,"10", 2);
}
else if (v < 0){
strncpy(pep_,"01", 2);
}
}

关于c - 函数中的字符串在 C 中不被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26589140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com