gpt4 book ai didi

c - 在另一个函数中修改 char* ? (分段故障)

转载 作者:行者123 更新时间:2023-11-30 19:55:27 24 4
gpt4 key购买 nike

我正在尝试修改 main(选项卡)中声明的字符数组。所以我将它发送到modify_tab并修改它。但它不起作用并向我发送段错误。这是我的代码:

  1│void    my_putstr(char *str)
2│{
3│ int i;
4│
5│ i = 0;
6│ while (str[i] != '\0')
7│ {
8│ write(1, &str[i], 1);
9│ i++;
10│ }
11│}
12│
13│void modify_tab(char *tab)
14│{
15│ char *map;
16│
17│ map = tab;
18│ map[3] = 'a';
19│ my_putstr(map);
20│}
21│
22│void main()
23│{
24│ char *tab;
25│
26│ tab = "0123456789\n\0";
27│ my_putstr(tab);
28│ modify_tab(tab);
29│}

最佳答案

tab 指向一个字符串文字,undefined behavior 用来修改字符串文字。另一种可行的方法是使用 char 数组:

char  tab[] = "0123456789\n" ;

请注意,您不需要使用 null 来终止字符串文字,在这种情况下以及您的原始代码中,它都会为您终止。

draft C99 standard 中有关修改字符串文字的相关引用来自 6.4.5 字符串文字 段落 6 ,其中表示 (强调我的 future ):

It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.

对于 null 终止,字符串文字将返回到段落 5

In translation phase 7, a byte or code of value zero is appended to each multibyte character sequence that results from a string literal or literals.66) [...]

在初始化数组的情况下,该部分为 6.7.8 初始化:

An array of character type may be initialized by a character string literal, optionally enclosed in braces. Successive characters of the character string literal (including the terminating null character if there is room or if the array is of unknown size) initialize the elements of the array.

关于c - 在另一个函数中修改 char* ? (分段故障),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21801559/

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