C:尝试从字符串末尾删除换行符

问题描述 投票:0回答:3

我正在尝试编写一个程序,从用户输入中删除最后一个换行符,即用户输入字符串后按回车键时生成的换行符。

void func4()
{

    char *string = malloc(sizeof(*string)*256); //Declare size of the string
    printf("please enter a long string: ");
    fgets(string, 256, stdin);  //Get user input for string (Sahand)
    printf("You entered: %s", string); //Prints the string

    for(int i=0; i<256; i++) //In this loop I attempt to remove the newline generated when clicking enter
                            //when inputting the string earlier.
    {
        if((string[i] = '\n')) //If the current element is a newline character.
        {
            printf("Entered if statement. string[i] = %c and i = %d\n",string[i], i);
            string[i] = 0;
            break;
        }
    }
    printf("%c",string[0]); //Printing to see what we have as the first position. This generates no output...

    for(int i=0;i<sizeof(string);i++) //Printing the whole string. This generates the whole string except the first char...
    {
        printf("%c",string[i]);
    }

    printf("The string without newline character: %s", string); //And this generates nothing!

}

但它的行为并不像我想象的那样。这是输出:

please enter a long string: Sahand
You entered: Sahand
Entered if statement. string[i] = 
 and i = 0
ahand
The string without newline character: 
Program ended with exit code: 0

问题:

  1. 为什么程序似乎将
    '\n'
    与第一个字符
    'S'
    匹配?
  2. 当我没有从字符串中删除任何内容时,为什么最后一行
    printf("The string without newline character: %s", string);
    根本不生成任何输出?
  3. 我怎样才能让这个程序做我想要做的事情?
c newline
3个回答
3
投票

条件

(string[i] = '\n')
将始终返回
true
。应该是
(string[i] == '\n')


2
投票
if((string[i] = '\n'))

这行可能是错误的,你是给 string[i] 赋值,而不是比较它。

if((string[i] == '\n'))

0
投票

您可以使用 string.h 库中的 strlen() 命令来查找字符串的长度,然后将长度加 1 并将字符串的该元素设置为 0

#include <string.h>

name[strlen(name)+1] = '0';

strlen() 将返回输入字符串的长度,无论分配给它的内存量如何,并且将其值加 1 将使程序到达换行符的位置。

© www.soinside.com 2019 - 2024. All rights reserved.