前提・実現したいこと
C言語でコマンドラインのような入力処理を作っています。
発生している問題・エラーメッセージ
そこで、入力した文字列を1文字ずつ取り出して、判断しようと次のようなプログラムを組んだのですが、2つ目に取り出したい"obj(char型)"がなぜか指定した文字列数取り出してくれません。
例)"move GameSettingFile"と入力すると、cmdには"move"が格納されますが、objは"GameSett"までしか格納されませんでした。
該当のソースコード
C
1#include <stdio.h> 2#include <string.h> 3#include <mbstring.h> 4#include <windows.h> 5 6char* extract_letter_func(char *); 7int main() { 8 char line[256]; 9 char cmd[8] = { "\0" }; 10 char obj[16] = { "\0" }; 11 printf("入力:"); 12 fgets(line, sizeof(line), stdin);//コマンドラインの取り出し 13 rewind(stdin); 14 15 char *h = line; 16 //cmdの取得 17 strncpy(cmd, extract_letter_func(h), 8); 18 19 if (*h != '\0') {//objの取得(なしの場合、スルー) 20 *(h += (strlen(cmd) + 1)); 21 strncpy(obj, extract_letter_func(h), 16); 22 } 23 24 25 26 printf("%s\n%s\n", cmd, obj); 27} 28char *extract_letter_func(char *h) { 29 char letter[16] = { "\0" }; 30 char tmp[3]; 31 while (*h != ' ' && *h != '\0'&&*h != '\n') { 32 switch (_mbclen((BYTE*)h)) { 33 case 1: 34 tmp[0] = *(h++); 35 tmp[1] = '\0'; 36 break; 37 case 2: 38 tmp[0] = *(h++); 39 tmp[1] = *(h++); 40 tmp[2] = '\0'; 41 break; 42 default: 43 //error 44 break; 45 } 46 strncat(letter, tmp, 16); 47 } 48 return letter; 49}
試したこと
cmd,objはもちろん、strncatのバイト数を増やしてみたのですが、変わりませんでした。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2017
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/27 13:22