如果我没有完全填充我的字符数组,那么存储在空地址中的值是什么?

If I incompletely populate my array of characters then what would be the values stored in the addresses which are empty?

我的任务是附加一个“.” (点)在字符数组的最后一个元素之后,我的策略是在 search.But 中遇到 '\0' 时立即添加点,即使数组中的元素小于 space 分配给它,点附加在最后一个位置。 例如,如果我分配了一个大小为 10 的数组并且我只输入了 5 个字符,那么点也会附加到第 10 个 place.How 中的数组,我可以解决这个问题吗? 以下是我编写的 C 代码:

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

int main(void) {
    int i;
    char dot = '.';
    char string_input[10];
    fgets (string_input, sizeof(string_input), stdin);
    int s = sizeof(string_input);
    for(i=0;i<=s;++i)
    {
        if (string_input[i]!= '[=10=]')
    {
        continue;
        }
            else
            {
                string_input[i]=dot;
                printf("Hello, %s\n", string_input);
        break;
            }
    }

    return 0;
}

这是因为您正在使用

int s = sizeof(string_input);

它给出字符串占用的内存量 - 在本例中为 10 个字节,无论其内容如何。

还要注意这个

for(i=0;i<=s;++i)

不正确,因为您不能尝试索引 string_input[10],该索引超出范围。

我建议您使用 strlen(),它会给出实际使用的字符串长度,包括 newline 字符 附加 fgets()。然后像这样覆盖newline

for(i=0;i<s;++i)
{
    if (string_input[i] == '\n')
        {
            string_input[i]=dot;
            printf("Hello, %s\n", string_input);
            break;
        }
}

要将点追加到字符数组的末尾,请尝试以下操作

#include <stdio.h>

int main(void) 
{
    char dot = '.';
    char string_input[10];
    const size_t N = sizeof( string_input );

    fgets( string_input, N, stdin );

    size_t i = 0;
    while ( i < N - 1 && string_input[i] != '\n' && string_input[i] != '[=10=]' ) ++i;

    while ( i < N - 1 ) string_input[i++] = dot;
    string_input[i] = '[=10=]';

    printf( "\"%s\"\n", string_input );

    return 0;
}

考虑到函数 fgets 也会读取对应于按下的 Enter 键的换行符,前提是它有足够的 space 来存储它。

如果输入例如

abcd

那么输出将是

"abcd....."

如果你只想在字符串末尾加一个点那么你可以这样写

#include <stdio.h>

int main(void) 
{
    char dot = '.';
    char string_input[10];
    const size_t N = sizeof( string_input );

    fgets( string_input, N, stdin );

    size_t i = 0;
    while ( i < N - 1 && string_input[i] != '\n' && string_input[i] != '[=13=]' ) ++i;

    if ( i < N - 1 ) string_input[i++] = dot;
    string_input[i] = '[=13=]';

    printf( "\"%s\"\n", string_input );

    return 0;
}

此处输出为

"abcd."

除了 melpomene 指出的差一错误之外,您的代码存在几个基本问​​题。首先,如果你想在字符串就地后附加一些字符,那么你应该提前为它腾出空间。所以而不是

fgets (string_input, sizeof(string_input), stdin);

你应该写

fgets (string_input, sizeof(string_input)-1, stdin);

然后你还需要在用点覆盖它之后用 '[=14=]' 终止你的字符串。所以与其说

string_input[i]=dot;

你应该说

string_input[i]=dot;
string_input[i+1]='[=13=]';

编码风格方面,需要注意

  • 正确的缩进
  • 避免一些微妙但愚蠢的事情,比如 if ( A!=B ) { continue; } else {...} 就是 if (A==B) {...};您也可以通过交换两个语句轻松避免调用 sizeof 两次。

我指出这些是因为我看到您可能正在学习这门语言。