0

文字列テキストに空のスペースを挿入するにはどうすればよいか疑問に思っていました(char *text = argv[1]; で定義されています)。

たとえば、書き込みの場合:


./mar "こんにちはお元気ですか"


を見たいのですが/


こんにちはお元気ですか こんにちはお元気ですか こんにちはお元気ですか こんにちはお元気ですか

そしてそうではない


こんにちはお元気ですかこんにちはお元気ですかこんにちはお元気ですかこんにちはお元気ですかこんにちはお元気ですか

CLIで水平にスクロールします。

コードは次のとおりです。

/*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;
} 
4

1 に答える 1

0

char引数文字列の長さより2バイト大きい新しい配列を割り当てる必要があります(スペースとヌルターミネータの両方のためのスペースがあるように)。次に、を呼び出しstrcpyて引数文字列を新しい配列にコピーし、最後から2番目のインデックスをスペースで上書きして、最後のインデックスにnullターミネータを配置します。

于 2011-02-28T13:25:10.663 に答える