繁体   English   中英

在C中打印字符数组

[英]Printing Char Arrays in C

我对我创建的一个简单函数有一个奇怪的问题。 此函数生成0-14之间的随机数,然后使用随机生成的数字作为大小创建一个数组,并使用char'x'填充它。

我遇到的问题是,当我调用该函数时,它将在x之后随机显示符号或数字。

我最初将数组声明为15号,但认为这是导致此显示问题的剩余插槽。 但是,更改功能后它仍然存在。

这是我正在使用的当前功能:

void application()
{
    int randSize, i;

    srand((unsigned)time(NULL));
    randSize = (rand() % 15);

    char array[randSize];
    char *bar = array;

    for(i=0; i< randSize; i++)
            array[i] = 'x';

    printf("%s | ", bar);
}

你不需要在C中用\\0结束字符串吗? ) 例如:

char array[randSize + 1];
for (i=0; i < randSize; i++)
   array[i] = 'x';
array[i] = '\0';

(更新了这个因为你确实想要获得 randSize 长度 字符串的有用部分 )。

printf("%s | ", bar);

%s转换需要一个指向0终止字符数组的指针,但您的数组不是以0结尾的。 因此行为是未定义的,但通常发生的是printf继续读取和打印字符,直到它找到0字节或到达禁止的内存,导致分段错误,以先发生者为准。

%s需要一个指向以null结尾的字符串的指针。 你没有提供,所以你有不明确的行为 ,你的程序是不正确的。

阅读printf的格式化手册,了解它的工作原理和预期结果。 实际上,对您在代码中使用的每个库函数执行此操作。 没有必要做你不应该做的事情,然后想知道为什么它不起作用; 所有好的图书馆都会提供他们要求的具体描述。

您正在使用printf来打印C字符串。 C字符串必须以空值终止。

如果要将array用作字符串,则需要分配一个附加字符,并在末尾附加\\0

char array[randSize + 1];

// loop to fill the array

array[i] = '\0';

由于printf需要一个以null结尾的字符串,如果没有它,它将继续打印超过数组的边界,读取不属于数组的内存。

除非声明为const,否则如何使用变量进行编译? 这是C99的旧功能,不被视为标准配置。 在此之前不允许在C中使用,也不能在C ++中工作

char array[randSize];

正确的方法是

char *array = malloc(randSize);

我在这里错过了一些东西吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM