gpt4 book ai didi

c - 在 char 数组指针内赋值

转载 作者:行者123 更新时间:2023-11-30 16:34:57 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX40 40

/* run this program using the console pauser or add your own getch, system("pause") or input loop */


Int40 *parseString(char *str)
{
Int40 *p;
char *ptr;
int i, len, value, ptrValue;

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


for(i = 0; i < 40; i++)
{
if(str[i] == 'a')
{
printf("%c\n", str[i]);
str[i] = '0';
printf("%c\n", str[i]);
}

}
}

int main(int argc, char *argv[])
{
// char string[40] = "
// char *str = string;
Int40 *p;


parseString("0123456789abcdef0123456789abcdef01234567");

return 0;
}

在我的 parseString 函数中,在两个 printf 语句之间,我试图将 'a' 特定点的值赋给 0。我不确定我应该如何尝试这个,并且我也希望保持变量相同。

最佳答案

这里的问题是,您正在向 parseString 传递一个指向字符串字面量。修改字符串文字的内容是未定义的行为大多数时候字符串文字驻留在只读存储器中,这就是为什么你的程序崩溃了。

你必须创建一个数组并用你想要的字符串初始化它,然后将该数组传递给函数:

#include <string.h>

void parseString(char *str, size_t len)
{
printf("%s\n", str);


for(size_t i = 0; i < len; i++)
{
if(str[i] == 'a')
{
printf("%c\n", str[i]);
str[i] = '0';
printf("%c\n", str[i]);
}
}
}

int main(int argc, char *argv[])
{
char text[] = "0123456789abcdef0123456789abcdef01234567";

parseString(text, sizeof text / sizeof *text);

return 0;
}

请记住,当您将数组传递给函数时,该函数仅获取一个指向数组第一个元素的指针。因此该函数是调用无法确定数组的长度。最好是通过练习数组的长度也是如此。这就是为什么我添加 size_t len 作为参数在parseString中。在声明 arraymain 中,我计算了数组长度,sizeof text/size *text。请注意,这仅适用于对于纯数组,如果您在 parseString 中执行了 sizeof str/sizeof *str,那么您肯定会得到错误的结果,这就是为什么你应该总是通过数组的长度。

关于c - 在 char 数组指针内赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49121452/

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