如何删除字符串中的换行符

时间:2012-09-16 18:47:40

标签: c string

我想删除字符串中的换行符'\ n'。

 char *string ="hallo\n";

    int i=0;
    int length = sizeof(string);

    while(i<length)
    {
        if(string[i+1] == '\n')
        {
            string[i+1] = '\0';
            break;
        }   
        i++;
    }

    printf("%s",string);
    printf("world");

我知道我可以生成一个新数组,它就像这样工作

char *string ="hallo\n";

int i=0;
int length = sizeof(string);
int lengthNew = length -1;
 char newStr[lengthNew];
    while(i<length)
    {
        printf("Char ist %c:",string[i]);
        newStr[i] = string[i];
        if(string[i+1] == '\n')
            break;
        i++;
    }

但是为什么使用堆栈,如果我只能在旧数组中使用一个字符?

3 个答案:

答案 0 :(得分:3)

根据您的评论,我提供了一个完全不同但更好的解决方案:strftime

time_t clock = time(NULL);

char buf[1024];

strftime(buf, sizeof buf, "%c", localtime(&clock);

printf("The date is: %s\n", buf);

%c格式与ctime使用的格式相同,但strftime更灵活。

答案 1 :(得分:2)

如果换行符始终是字符串的最后一个字符,则可以按照您的描述进行编码。

否则,您必须创建第二个字符缓冲区并将字符复制到第二个缓冲区。原因是在C中\0字符标记字符串的结尾。

如果您有这样的字符串:"this \n is \n a \n test",那么在您更换后,内存将如下所示:"this \0 is \0 a \0 test"。大多数C程序只会将其解释为字符串"this "并忽略第一个空后的所有内容。

修改 正如其他人所指出的,您的代码还存在其他问题。 sizeof()将返回字符指针的大小,而不是字符串的长度。也无法修改只读字符串文字。

答案 2 :(得分:-2)

char *string = ctime(&myTimeT);
char *c = strrchr(string, '\n');

if (c != NULL)
    *(c) = '\0';