c - 为什么下面的代码给出了垃圾值?

标签 c string

为什么下面的代码是垃圾值? 在这里,我试图逐个字符地从用户那里获取一个字符串作为输入。在下面的代码中,我从用户那里获得了输入并存储在 string[] 数组中,然后为了执行一些其他操作,我将相同的内容存储在另一个名为 temp_string[i] 的数组中。但令人惊讶的是,我在输出中得到垃圾值。而且使用 strlen 计算的长度也不正确。谁能看看这段代码并解释出什么问题了?

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

int main()    
{
    char ch;
    int i = 0, j = 0;
    int length = 0;
    int lengthsb = 0;
    char string[100];

    printf(" Enter the string to divide\n "); 
    while(ch != '\n')
    {
        ch = getchar();
        string[i] = ch;
        i++;
    }
    char temp_string[i];
    printf("%s", string);
    i = 0;
    while(string[i] != '\n')
    {
        temp_string[i] = string[i];
        i++;
    }

    length = strlen(temp_string);
    printf("Entered string is  %s and its length is %d\n", temp_string, length);
}

最佳答案

您忘记在字符串末尾添加空值。 C 字符串以 null 结尾,这意味着 c 字符串中的所有操作都需要一个 null 来标记字符串的结尾,包括 strlen 等函数。

您只需添加即可实现:

string[i] = '\0';

填充字符串后。

另一件事,如果用户输入大于 100 的字符串会怎样?验证这些情况下的输入是很好的,否则你会得到缓冲区溢出。

关于c - 为什么下面的代码给出了垃圾值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317409/

相关文章:

将 char 指针转换为 unsigned char 数组

c - 如何仅使用指针反转字符串?

c - 列出链接列表的内容

python - 在Python中将字符串日期写入CSV

c++ - 防止 Core Dump 使用空指针初始化字符串

javascript - 我的代码没有正确比较两个不同的字符串

c - 每次调用 strtok_r() 时都会出现段错误,即使在简单的情况下也是如此

c - 快速提问

r - 以编程方式构建公式而无需字符串操作

c - 从float转换为double会产生不同的结果-相同的代码,相同的编译器,相同的OS