0

我有字符指针输入并为其设置了 50 字节的内存。在我使用 scanf 从键盘输入后,例如“apple”,然后我假设剩余的空格用空字符填充。如果是这样,我如何获取所有字符或内存位置,包括空字符的位置。有什么办法吗?

int main() {
    char *input;
    int size;

    input = (char *)malloc(50);
    printf("%s\n", "enter something:");
    scanf("%s", input);

    size = strlen(input) + 1;
4

2 回答 2

1

或例如“苹果”,然后我假设剩余的空格都填充了空字符

你的假设是错误的。数组中的所有其他元素都具有破坏值。

如何获取所有字符或内存位置,包括空字符的位置。有什么办法吗?

您不能使用任何字符串函数访问空字符以外的字符。但是您可以将它们作为数组的“普通”元素访问

int main() {
    char *input;
    int size;

    input = (char *)malloc(50);
    printf("%s\n", "enter something:");
    scanf("%s", input);

    for(size_t i = 0; i < 50; i++)
    {
        printf("Char no [%zu] is 0x%02x = %s\n", i, input[i], (input[i] >= ' ' && input[i] < 127) ? (char[]){'\'', input[i], '\'', 0} : "not printable");
    }
}
于 2021-12-03T16:39:53.827 回答
1

字符串操作函数适用于字符串。如果要将字符数组视为字符数组而不是字符串,只需避免使用字符串函数(通常是那些名为 的函数str*)。例如:

#include <stdio.h>

int
main(int argc, char **argv)
{
    char input[50] = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw";
    printf("%s\n", "enter something:");
    if( 1 == scanf("%49s", input)) {
        fwrite(input, sizeof(char), sizeof input, stdout);
        putchar('\n');
    }
    return 0;
}

请注意,如果您希望查看此数据,则可能无法很好地呈现不可打印的字符。特别是在终端查看数据时,scanf写入的空字符可能会引起一些混乱。YMMV。

于 2021-12-03T16:29:08.407 回答