将用户输入连接到 C 中的字符串
Concat user input onto a str in C
我正在编写一个程序,我需要获取用户输入的程序名称和最多 2 个参数,然后执行该程序。我的问题是处理获取用户输入并将其连接到“./”字符串,因为程序将从给定目录执行。到目前为止,我尝试使用的是这个。
int main(int argc, char *argv[])){
int counter = 0;
char input[80];
char ProgramName[80];
printf("Enter program name and any parameters: ");
fgets(input, 80, stdin);
while(!isspace(input[counter])){
ProgramName[counter] = input[counter];
counter++;
}
}
我用isspace查白space,遇到了才知道后面跟着一个参数,就是程序名的结尾。我的问题是,如何将程序的名称连接到 ./ 而没有任何额外的尾随空白字符或任何不会导致它正确执行的内容?我尝试使用 strcpy 和 strcat,但是当我这样做时,我在命令 window 中得到了一堆奇怪的尾随字符。
您看到的可能是尾随垃圾,因为 ProgramName
不是字符串:它缺少 NUL 终止符。您可以通过添加
来解决这个问题
ProgramName[counter] = '[=10=]';
循环后。
要在字符串前面添加 ./
,为什么不在开头添加呢?
int counter_a = 0, counter_b = 0;
...
ProgramName[counter_a++] = '.';
ProgramName[counter_a++] = '/';
while (!isspace(input[counter_b])) {
ProgramName[counter_a++] = input[counter_b++];
}
ProgramName[counter_a] = '[=11=]';
最后,将 char
传递给 isspace
是错误的,因为 isspace
仅在非负输入上定义,但 char
可以为负。您可以使用以下方法解决该问题:
while (input[counter] != '[=12=]' && !isspace((unsigned char)input[counter])) {
我还在上面添加了 '[=19=]'
的检查。如果 input
不包含任何空格,则必须不读到它的末尾。
我正在编写一个程序,我需要获取用户输入的程序名称和最多 2 个参数,然后执行该程序。我的问题是处理获取用户输入并将其连接到“./”字符串,因为程序将从给定目录执行。到目前为止,我尝试使用的是这个。
int main(int argc, char *argv[])){
int counter = 0;
char input[80];
char ProgramName[80];
printf("Enter program name and any parameters: ");
fgets(input, 80, stdin);
while(!isspace(input[counter])){
ProgramName[counter] = input[counter];
counter++;
}
}
我用isspace查白space,遇到了才知道后面跟着一个参数,就是程序名的结尾。我的问题是,如何将程序的名称连接到 ./ 而没有任何额外的尾随空白字符或任何不会导致它正确执行的内容?我尝试使用 strcpy 和 strcat,但是当我这样做时,我在命令 window 中得到了一堆奇怪的尾随字符。
您看到的可能是尾随垃圾,因为 ProgramName
不是字符串:它缺少 NUL 终止符。您可以通过添加
ProgramName[counter] = '[=10=]';
循环后。
要在字符串前面添加 ./
,为什么不在开头添加呢?
int counter_a = 0, counter_b = 0;
...
ProgramName[counter_a++] = '.';
ProgramName[counter_a++] = '/';
while (!isspace(input[counter_b])) {
ProgramName[counter_a++] = input[counter_b++];
}
ProgramName[counter_a] = '[=11=]';
最后,将 char
传递给 isspace
是错误的,因为 isspace
仅在非负输入上定义,但 char
可以为负。您可以使用以下方法解决该问题:
while (input[counter] != '[=12=]' && !isspace((unsigned char)input[counter])) {
我还在上面添加了 '[=19=]'
的检查。如果 input
不包含任何空格,则必须不读到它的末尾。