Вставьте пустое место в конце строки - PullRequest
0 голосов
/ 28 февраля 2011

Мне было интересно, как вставить пустой пробел в строку текст (определено в char * text = argv [1];)

Например, если запись:


. / Mar "Привет, как дела?"


Хотелось бы увидеть /


Привет, как ты? Привет, как ты? Привет, как ты? Привет, как ты?

а не


Привет, как дела? Привет, как дела? Привет, как дела? Привет, как дела? Привет, как дела

горизонтальная прокрутка в кли.

Код:

/*mar.c*/
#include <curses.h>
#include <unistd.h> // For sleep()
#include <string.h> // For strlen()
#include <stdlib.h> // For malloc()
#include <sys/select.h>

int main(int argc, char* argv[])
{

char *text = argv[1];
char *scroll;
int text_length;
int i,p, max_x, max_y;


// Get text length
text_length = strlen(text);

// Initialize screen for ncurses
initscr();

// Don't show cursor
curs_set(0);

// Clear the screen
clear();

// Get terminal dimensions
getmaxyx(stdscr, max_y, max_x);

scroll = malloc(2 * max_x + 1);

for (i=0; i< 2*max_x; i++) {
    getmaxyx(stdscr, max_y, max_x);    
    scroll[i] = text[i % text_length];
}

scroll[2*max_x - 1]='\0';


// Scroll text back across the screen
p=0;
do{
        getmaxyx(stdscr, max_y, max_x);
        mvaddnstr(0,0,&scroll[p%max_x], max_x);
        refresh();
        usleep(40000);
    p=p+1;
// Execute while none key is pressed   
}while (!kbhit());

endwin();
return 0;
}

int kbhit(void)
{
struct timeval tv;
fd_set read_fd;

tv.tv_sec=0;
tv.tv_usec=0;
FD_ZERO(&read_fd);
FD_SET(0,&read_fd);

if(select(1, &read_fd, NULL, NULL, &tv) == -1)
return 0;

if(FD_ISSET(0,&read_fd))
return 1;

return 0;
} 

1 Ответ

0 голосов
/ 28 февраля 2011

Вам нужно выделить новый массив char, длина которого на 2 байта больше длины строки аргумента (чтобы было место как для пробела, так и для нулевого терминатора).Затем вызовите strcpy, чтобы скопировать строку аргумента в новый массив, перезаписать второй до последнего индекс пробелом и поставить нулевой терминатор в последний индекс.

...