gpt4 book ai didi

arrays - 使用sizeof将字符附加到字符串形式用户的末尾

转载 作者:行者123 更新时间:2023-12-02 11:25:33 25 4
gpt4 key购买 nike

我正在尝试使用以下代码将右括号附加到从用户获取的字符串的末尾

int main( void )
{
char charArray[ 20 ];

fgets( charArray, 20, stdin );

charArray[ sizeof( charArray ) / sizeof( charArray[ 0 ] ) ] = ')';

printf( "%s", charArray );
}
但如果我输入: 4 + 5 ,则输出仅为: 4 + 5 而不是: 4 + 5)
为了以防万一,我甚至尝试了以下变体
int main( void )
{
char charArray[ 20 ];
int n;

fgets( charArray, 20, stdin );

n = sizeof( charArray ) / sizeof( charArray[ 0 ] );

charArray[ n ] = ')';

printf( "%s", charArray );
}
但这是行不通的。因此,通过执行此操作,我消除了对sizeof的需要
int main( void )
{
char charArray[ 20 ];
int i = 0;

do{
scanf( "%c", &charArray[ i ] );
++i;
} while( charArray[ i - 1 ] != '\n' );

charArray[ i - 1 ] = ')';

printf( "%s", charArray );
}
但是我将来可能需要sizeof,所以我想知道我做错了什么。而且,与scanf相比,使用fgets和sizeof似乎更直接和简洁,并且使用神秘的[i-1]下标。 请给我有关sizeof方法的启发:我的代码有什么问题?

最佳答案

首先,char的大小始终为1,它是在规范中定义的。
其次,数组的大小是数组本身的大小,以“字节”为单位。
那意味着

sizeof( charArray ) / sizeof( charArray[ 0 ] )
等于
20 / 1
等于 20
也就是说,您将始终写入数组的第二十一个元素,该元素超出范围并导致未定义的行为。
如果要将字符附加到字符串中,请使用 strcat将字符作为字符串附加(确保不超出范围):
// Check to make sure there's space in the array, the -1 is for the terminator
if (strlen(charArray) < (sizeof charArray - 1))
{
strcat(charArray, ")");
}
或使用 strlen获取字符串null终止符的位置并用char覆盖它(但请记住添加一个新的null终止符,并进行检查以免超出范围):
// Get the index of the current null-terminator in the string
size_t terminator_index = strlen(charArray);

// Check to make sure there's space in the array, the -1 is for the terminator
if (terminator_index < (sizeof charArray - 1))
{
// Can append new character
charArray[terminator_index] = ')';

// Add terminator
charArray[terminator_index + 1] = '\0';
}

关于arrays - 使用sizeof将字符附加到字符串形式用户的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63668844/

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