0

我想删除字符串中的换行符 '\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++;
    }

但是,如果我只能替换旧数组中的一个字符,为什么还要使用堆栈呢?

4

3 回答 3

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更灵活。

于 2012-09-16T19:07:15.300 回答
2

如果换行符始终是字符串的最后一个字符,则可以像描述的那样对其进行编码。

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

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

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

于 2012-09-16T18:53:48.427 回答
-2
char *string = ctime(&myTimeT);
char *c = strrchr(string, '\n');

if (c != NULL)
    *(c) = '\0';
于 2012-09-16T18:54:27.753 回答