Making минимальные изменения это рабочая версия кода:
#include <string.h>
#include <stdio.h>
int main()
{
char current[2] = { 0x0, 0x0 }; // Will be null terminated
char chs[100] = "Hello World";
char token[100] ;
int pos = -1; // Destination of strcat must also be null terminated
token[0] = '\0' ;
// String literals does not actually have " in memory they end in \0
while((current[0] = chs[++pos]) != '\0')
{
strcat(token, ¤t[0]); // Take the address of the first char in current
}
printf("%s\n", token) ;
return 0 ;
}
strcat
ожидает источник и место назначения будет нулем строки. В вашем случае это выглядит как current
только что закончил с \001
, за которым следует нулевой терминатор после него в памяти.
@mbratch Выход должен быть Hello World – Foredoomed
@Foredoomed Вы пытаетесь лишить цитаты вокруг строкового литерала? Кавычки на самом деле не являются частью строки для начала! Возможно, вам стоит начать читать [книгу] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list). – Praetorian
@Foredoomed, но предполагается ли это, что это строковая копия с 'chs' на' token'? Если это так, то для этого используется 'strcpy'. Вы просто делаете 'strcpy (токен, chs);' и делаете это. Никакой цикл не требуется. Или какая-то другая цель? Если вы хотите использовать 'strcat', для этого требуется, чтобы оба строковых параметра были нулевыми. Поэтому вам, по крайней мере, нужно было бы установить токен [0] = '\ 0'' для начала до цикла, как я уже упоминал. – lurker