提问人:GjdGr8 提问时间:6/15/2023 最后编辑:GjdGr8 更新时间:6/15/2023 访问量:78
变量在 C 中自行更改其值
variable changing its value on its own in c
问:
就上下文而言,我是 C 语言的初学者,我正在制作一个包含该语言所有重要细节的文件,我注意到我在开始时定义的变量(类型)似乎在程序中更改了它的值,当我使用指针访问它时。int
这是代码的进行方式(我删除了解释每行的所有注释(bc 我是初学者))
#include <stdio.h>
#include <string.h>
int main() {
printf("Hello World\n");
int uninitialisedArrayOfInt[4];
int initialisedArrayOfInt[] = {0, 1, 2, 3};
int len = sizeof(uninitialisedArrayOfInt)/sizeof(int);
for (int i = 0; i < len; i++){
uninitialisedArrayOfInt[i] = i+1;
initialisedArrayOfInt[i] = i+2;
}
int i = 0;
while(i<len){
printf("%i\n", uninitialisedArrayOfInt[i]);
i++;
}
int arr[1][1];
char str1[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
printf("%s\n", str1);
char str2[] = "Hello World!";
printf("%s\n", str2);
int len2 = strlen(str1);
printf("%i\n", len2);
strcat(str1, str2); //the len values changes from this step to the next
printf("%s\n", str1); //len becomes 1919899424
char copycat[sizeof(str2)];
strcpy(copycat, str2);
printf("%s\n", copycat);
int* lenPtr = &len;
printf("%p\n", lenPtr);
printf("%i\n", *lenPtr);
*lenPtr = 200;
printf("%i\n", len);
}
有趣的是,我只在开头和结尾处玩弄,但是在我连接和 的行上,值变为(它变了)。len
1919899424
str1
str2
正如你们所知道的,我在 vscode 中运行了这段代码,我使用的编译器和调试器是 gcc 和 gdb。
我必须包含整个代码,因为没有它就不会发生错误
正如许多人所困惑的那样,该函数不会更改此处解释的值 (https://www.codecademy.com/courses/learn-c-arrays-and-strings/lessons/strings-c/exercises/concatenating-strings#:~:text=What%20actually%20happens%20is%20the%20function%20takes%20the%20two%20strings%20and%20creates%20a%20char%20array%20of%20size%20strlen(src)%20%2B%20strlen(dst)%20%2B%201。strcat()
len
)
答:
2赞
i486
6/15/2023
#1
中没有可用空间来连接其他字符串。修改数组外部的内存并更改变量的值(在本例中)后。str1
concat
str1
len
评论
0赞
GjdGr8
6/15/2023
正如我之前所说,该函数会处理这个问题,如这里所述(codecademy.com/courses/learn-c-arrays-and-strings/lessons/......strcat()
)
4赞
BoP
6/15/2023
但正如这里提到的,strcat 引用它没有。似乎你读了一个比你懂 C 的人的教程。在互联网上一直发生。:-(
0赞
GjdGr8
6/15/2023
是的,:(,我想我会改变我的路线。
评论
strcat(str1, str2);
- 数组是固定大小的(此处由其初始值设定项决定),并且不会神奇地增长以容纳更多数据。您正在调用未定义的行为。strcat()
无法更改数组变量的大小。没有什么可以。这并不意味着这是不够的。相反,这意味着您误用并且您的数组不足。它的大小应该足以包含您要放入其中的内容。strcat()
strcat()