C 一个数组影响另一个,两个数组分别声明
我在编写一些代码时遇到了这个问题。我声明了两个数组,一个数组称为start,它被初始化为字符串hello。第二个数组被称为user,应该用for循环声明为。。但是,我的名为start的数组被修改,因此我的输出如下所示:C 一个数组影响另一个,两个数组分别声明,c,arrays,C,Arrays,我在编写一些代码时遇到了这个问题。我声明了两个数组,一个数组称为start,它被初始化为字符串hello。第二个数组被称为user,应该用for循环声明为。。但是,我的名为start的数组被修改,因此我的输出如下所示: Printed word: Hello Array Length: 5 _____o 为什么要重写我的起始数组?对不起,如果这是一个我正在自学的noob问题 #include <stdio.h> #include <string.h> int ma
Printed word: Hello
Array Length: 5
_____o
为什么要重写我的起始数组?对不起,如果这是一个我正在自学的noob问题
#include <stdio.h>
#include <string.h>
int main(void)
{
size_t length = 0;
char start [] = {"Hello"};
printf("\nPrinted word: %s\n", start);
length = strlen(start);
printf("Array Length: %zi\n", length);
char user[] = {0};
for(size_t x = 0; x < length; x++){ //starting here
user[x] = '_';
}
printf("%s\n",start);
}
#包括
#包括
内部主(空)
{
尺寸长度=0;
char start[]={“Hello”};
printf(“\n打印字:%s\n”,开始);
长度=strlen(开始);
printf(“数组长度:%zi\n”,长度);
字符用户[]={0};
对于(size_t x=0;x
用户
字符数组定义为size=1
char user[] = {0};
上面的定义意味着char数组包含一个elment,即0。以这种方式声明用户
数组意味着用户
数组的大小是从您在声明中放置的元素数推导出来的
在for循环中,您正在为char数组元素赋值,其中用户的索引不存在。因此,您将获得未定义的行为
将数组的声明更改为:
char user[length+1] = {0};
编辑
如果编译器不支持可变长度的静态数组声明,那么在这种情况下可以使用动态内存分配
char *user = malloc((length+1) * sizeof(char));
当与用户
数组指针相关的内存在程序中变得无用时,别忘了用
free(user);
user
char数组是用size=1定义的
char user[] = {0};
上面的定义意味着char数组包含一个elment,即0。以这种方式声明用户
数组意味着用户
数组的大小是从您在声明中放置的元素数推导出来的
在for循环中,您正在为char数组元素赋值,其中用户的索引不存在。因此,您将获得未定义的行为
将数组的声明更改为:
char user[length+1] = {0};
编辑
如果编译器不支持可变长度的静态数组声明,那么在这种情况下可以使用动态内存分配
char *user = malloc((length+1) * sizeof(char));
当与用户
数组指针相关的内存在程序中变得无用时,别忘了用
free(user);
您没有在user
数组中分配任何房间,它的长度为1,因为您只提供一个初始值设定项值。因此,当您写入它时,您的操作超出了范围,并溢出到其他变量使用的内存中
此外,对于带引号的字符串,不需要大括号,它应该是:
const char start[] = "Hello";
或
最后,即使存在空间,您的循环也没有正确终止user
,因此后续的printf()
和%s
期望以0结尾的字符串将调用未定义的行为。您没有在user
数组中分配任何空间,它的长度为1,因为您只提供一个初始值设定项值。因此,当您写入它时,您的操作超出了范围,并溢出到其他变量使用的内存中
此外,对于带引号的字符串,不需要大括号,它应该是:
const char start[] = "Hello";
或
最后,即使有空间,您的循环也没有正确终止user
,因此后续的printf()
和%s
期望以0结尾的字符串将调用未定义的行为。我没有将变量长度放入数组声明中的原因是因为我的编译器(xcode)获取一个错误,该错误表示“可变大小的对象可能未初始化”。在将索引设置为10之后,代码运行良好!所以缺少索引就是问题所在,谢谢。是否有一种方法允许数组大小根据长度而变化?@user2335238 answer updated请参阅编辑部分了解您的问题的回答我没有将变量长度放入数组声明中的原因是因为我的编译器(xcode)收到一个错误,该错误表示“变量大小的对象可能未初始化”。在将索引设置为10之后,代码运行良好!所以缺少索引就是问题所在,谢谢。是否有一种方法可以允许数组大小根据长度而变化?@user2335238答案更新请参见编辑部分以获取您问题的回答