gpt4 book ai didi

c - 试图将一些数字放入 char 数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:42 24 4
gpt4 key购买 nike

我正在尝试创建一个由一些字母和数字组成的 char 数组(该函数最初要复杂得多,但我一直在简化它以弄清楚为什么它不能正常工作)。所以我有一个 char 数组,我在其中放置了 2 个字符,并尝试向其中添加一些数字。由于我无法弄清楚的原因,数字没有添加到数组中。这可能真的很愚蠢,但我是 C 的新手,所以这是简化的代码。非常感谢任何帮助,谢谢!

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

char some_string[20];

char *make_str() {
some_string[0] = 'a';
some_string[1] = 'x';
int random = 0;
int rand_copy = 0;
random = (rand());
rand_copy = random;
int count = 2;
while ( rand_copy > 0 ) {
rand_copy = rand_copy / 10;
++count;
}
int i=2;
for (i=2; i<count; i++) {
some_string[i] = random%10;
random = random/10;
}
return (some_string);
}

int main(int argc, const char *argv[]) {
printf("the string is: %s\n",make_str());
return 0;
}

最佳答案

你有很多问题:

  1. 结果字符串不是零终止的。添加 some_string[i] = '\0'; 来解决这个问题
  2. 字符 (char) 类似于“字母”,但是 random % 10 生成一个数字 (int),当转换为控制代码中的字符结果(ASCII 字符 0-9 是控制代码)。你最好使用 some_string[i] = (random % 10) + '0';
  3. 您正在使用固定长度的字符串(20 个字符),这可能就足够了,但它可能会导致许多问题。如果您是初学者并且还没有学习动态内存分配,那么现在就可以了。但请记住,固定长度的缓冲区是 C 代码错误的 10 大原因之一。如果您必须使用固定长度的缓冲区(这样做有正当理由),请始终检查您是否没有超出缓冲区。使用预定义的缓冲区长度常量。
  4. 除非您练习的全部目的是尝试将数字转换为字符串,否则请使用像 snprintf 这样的 libc 函数将任何内容打印成字符串。
  5. 不要使用全局变量 (some_string),如果您这样做(对于一个小示例来说没问题),则返回此值毫无意义。

稍微好一点的版本:

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

#define BUF_LENGTH 20
char some_string[BUF_LENGTH];

char *make_str() {
some_string[0] = 'a';
some_string[1] = 'x';
int random = rand();
int rand_copy = random;
int count = 2;
while (rand_copy > 0) {
rand_copy = rand_copy / 10;
++count;
}
int i;
for (i = 2; i < count; i++) {
/* check for buffer overflow. -1 is for terminating zero */
if (i >= BUF_LENGTH - 1) {
printf("error\n");
exit(EXIT_FAILURE);
}
some_string[i] = (random % 10) + '0';
random = random / 10;
}
/* zero-terminate the string */
some_string[i] = '\0';
return some_string;
}

int main(int argc, const char *argv[]) {
printf("the string is: %s\n",make_str());
return 0;
}

关于c - 试图将一些数字放入 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12090489/

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