Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,在字符数组的前半部分中查找其他字符的程序_C_Arrays_Debugging - Fatal编程技术网

在C语言中,在字符数组的前半部分中查找其他字符的程序

在C语言中,在字符数组的前半部分中查找其他字符的程序,c,arrays,debugging,C,Arrays,Debugging,这是程序的第一部分,我有几个问题想问一下它的各个部分到底是如何工作的。记住这是我写的第一个C程序。scanf(“%d”、&numberOfTimes);为什么我需要&它有什么作用? 字符输入[][200];这基本上是一个字符串数组还是完全不同的数组 #include <stdio.h> #include <string.h> char outputs[100]; char input[][200]; int numberOfTimes; void io(void){

这是程序的第一部分,我有几个问题想问一下它的各个部分到底是如何工作的。记住这是我写的第一个C程序。scanf(“%d”、&numberOfTimes);为什么我需要&它有什么作用? 字符输入[][200];这基本上是一个字符串数组还是完全不同的数组

#include <stdio.h>
#include <string.h>
char outputs[100];
char input[][200];
int numberOfTimes;

void io(void){
    scanf("%d", &numberOfTimes);
    for(int i = 0; i < numberOfTimes; i++){
        scanf("%s",input[i]);
    }
}
预期产出:

y

po

i

ntc
我得到的输出:

yourur

progressogressress

is

noticeableticeableceable

谢谢您的帮助。

变量前面的
&
表示您指的是变量的地址,而不是变量值本身。如果您不知道变量的地址是什么:

char input[][200]
是char数组的数组(char数组被庸俗化为字符串,但它不是类型)


您的问题是关于
strcat
的使用,您正在添加介于
string[i]
(包括)和
string[strLength]
之间的字符,而不仅仅是
string[i]
字符

变量前面的
&
表示您指的是变量的地址,而不是变量值本身。如果您不知道变量的地址是什么:

char input[][200]
是char数组的数组(char数组被庸俗化为字符串,但它不是类型)


您的问题是关于
strcat
的使用,您正在添加介于
string[i]
(包括)和
string[strLength]
之间的字符,而不仅仅是
string[i]
字符

您的问题在strcat中:

您的代码传递地址,因此您将从该字符开始获得整个字符串

strcat(outputs,&string[i]);
现在,将上述代码更改如下:

strcat(output,string[i]);
您将获得所需的输出。初始代码的问题在于,您传递的是地址,而不是单个字符。
此外,更改for循环的方式应确保“您的问题在strcat中:

您的代码传递地址,因此您将从该字符开始获得整个字符串

strcat(outputs,&string[i]);
现在,将上述代码更改如下:

strcat(output,string[i]);
您将获得所需的输出。初始代码的问题是您传递的是地址,而不是单个字符。
另外,更改for循环的方式为“
char input[][200],编译器应该投诉,但它仍然有效。运行任何有错误的程序的结果都是毫无意义的。例如,在你的例子中,你得到了一堆垃圾输出,但任何事情都可能发生。好吧,我明白你的意思。我认为这没关系,因为它们只是警告而已。认识到C既没有字符串(它有指向字符串开头的指针,第一个字节值0表示字符串的结尾,不考虑字符串的空间大小),也没有数组,这可能会有所帮助(它有指向原始内存缓冲区的指针,上面粘有足够多的静态类型,这样你就可以讨论数组类型了)。这对于那些已经知道其他有字符串和数组的语言的C学习者来说是很重要的
,编译器应该投诉,但它仍然有效。运行任何有错误的程序的结果都是毫无意义的。例如,在你的例子中,你得到了一堆垃圾输出,但任何事情都可能发生。好吧,我明白你的意思。我认为这没问题,因为它们只是关于这一点的警告。这可能对你有所帮助认识到C既没有字符串(它有指向字符串开头的指针,第一个字节值为0表示字符串的结尾,而不考虑字符串的空间大小)也没有数组(它有指向原始内存缓冲区的指针,上面粘有足够的静态类型,所以可以讨论数组类型)。这对于那些已经知道其他有字符串和数组的语言的C语言学习者来说是很重要的。当我取出&I得到一个“不兼容的整数到指针转换,将'char'传递到'const char*'类型的参数;将地址与&”strcat用于追加字符串而不是单个字符。因此,请使用以下链接了解如何将字符追加到字符串:Try,char temp[2];temp[0]=字符串[i];temp[1]='\0';strcat(outputs,temp);这将起作用:)当我取出“将'char'传递给'const char*'类型的参数的整数到指针转换不兼容;使用带有&“strcat用于追加字符串而不是单个字符的地址。因此,请使用以下链接了解如何将字符追加到字符串:Try,char temp[2];temp[0]=字符串[i];temp[1]='\0';strcat(outputs,temp);这将起作用:)