我想删除字符串中的换行符'\ 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++;
}
但是为什么使用堆栈,如果我只能在旧数组中使用一个字符?
答案 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';