gpt4 book ai didi

c - C 中的字符串行为

转载 作者:太空狗 更新时间:2023-10-29 14:57:56 25 4
gpt4 key购买 nike

我正在读一门 C 类(class)(它是荷兰语,所以你可能不知道)并且有一个小练习来理解字符串行为。因此,我创建了一个小的 C 程序来开始练习,但我的程序的第一个输出已经(对我而言)令人惊讶。

我的 C 程序的来源:

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

void printString(char *string)
{
printf("0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19\n");
printf("%c ",string[0]);
printf("%c ",string[1]);
printf("%c ",string[2]);
printf("%c ",string[3]);
printf("%c ",string[4]);
printf("%c ",string[5]);
printf("%c ",string[6]);
printf("%c ",string[7]);
printf("%c ",string[8]);
printf("%c ",string[9]);
printf("%c ",string[10]);
printf("%c ",string[11]);
printf("%c ",string[12]);
printf("%c ",string[13]);
printf("%c ",string[14]);
printf("%c ",string[15]);
printf("%c ",string[16]);
printf("%d ",string[17]);
printf("%d ",string[18]);
printf("%d\n",string[19]);
}

void main(){

char str[20];

strcpy(str,"Dag grootmoeder!");
printString(str);
}

我用 gcc(没有特殊开关)编译并运行程序几次:(对于说英语的人 Dag grootmoeder!== Hi grandma!)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g g r o o t m o e d e r ! 94 -90 111

$./oefString

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g g r o o t m o e d e r ! 51 -12 96

$./oefString

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g g r o o t m o e d e r ! -17 -117 28

$./oefString

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g g r o o t m o e d e r ! 96 15 -28

$./oefString

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g g r o o t m o e d e r ! -20 -46 -18

$./oefString

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

D a g g r o o t m o e d e r ! 68 -75 58

问题是:

1) 为什么我得到 str 的最后 3 个索引的垃圾值?起初我也在 printf() 中使用 %c 并注意到字符发生了变化,这就是为什么我之后使用 %d 来显示整数值。

2) 为什么这些值会改变?除了使用 strcpy() 将相同的字符串复制到 str.

之外,我什么都不做。

感谢您花时间阅读,感谢那些回复的人!

乔恩

最佳答案

您只是在字符串结尾处 访问内存。你没有填满它,所以你可以在那里找到任何东西 - 这就是为什么每次运行你都会找到其他东西。

在 C 中,“字符串”实际上是以 0 结尾的数组(或指向内存的指针)。因此,如果您使用 "%d" 打印字符,您会注意到紧跟在 ! 之后的最后一个元素是 0

如果你希望它是可预测的,你可以在使用它之前初始化你的字符串:

memset(str, 0, sizeof(str));

char str[20] = {0,};

作为旁注,它是 int main,而不是 void main

关于c - C 中的字符串行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8668729/

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