繁体   English   中英

Function 存储字符串,包括 C 中的制表符、空格和换行符

[英]Function that stores string including tabs,spaces and new lines in C

我想存储一个最多 n 个字符的字符串,包括制表符、空格和换行符,但我不明白如何仅在字符串末尾获取这个'\0'字符。

void takeString(char *c,int n)
{
    int i=0;
    char *result = fgets(c,n,stdin);
    if(result)
    {
        while(c[i] != '\0')
            i++;
        if(c[i]=='\0')
            c[i] = ' ';
    }
    c[n] = '\0';
}

但我无法理解如何仅在字符串末尾获取此 '\0' 字符。

if(c[i]=='\0') c[i] = ' '; 导致c[]不再是字符串,因为它缺少null 字符

c[n] = '\0'; 有2个问题。 它不会再次使c[]成为字符串,因为它没有在' '和 2 之后设置字符,并且可能会在指向我的c的数组指针之外设置一个字符,从而导致未定义的行为(UB)。

相反,在c[i] = ' '之后,将下一个字符设置为'\0'

目前尚不清楚为什么 OP 想要 append 一个空格字符。

void takeString(char *c, int n) {
    int i=0;
    //char *result = fgets(c,n,stdin);
    char *result = fgets(c,n-1,stdin); // Leave room to append a ' '
    if(result) {
        while(c[i] != '\0') {
            i++;
        } 
        //if(c[i]=='\0')
        c[i++] = ' ';
        c[i] = '\0';
    }
    // c[n] = '\0';
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM