C 将字符数组复制到数组的元素
我一直在编写一个函数,用于提取每两个换行符之间的信息。在将字符数组“data”复制到“info”数组的元素时,我遇到了一个问题C 将字符数组复制到数组的元素,c,arrays,string,C,Arrays,String,我一直在编写一个函数,用于提取每两个换行符之间的信息。在将字符数组“data”复制到“info”数组的元素时,我遇到了一个问题 #include <stdio.h> #include <string.h> void query_db(); char buffer[100]="+HTTPREAD:86\nUdara\nNO\n+94123456789\nOK"; volatile int buffer_pointer; char info[3][20]; int ma
#include <stdio.h>
#include <string.h>
void query_db();
char buffer[100]="+HTTPREAD:86\nUdara\nNO\n+94123456789\nOK";
volatile int buffer_pointer;
char info[3][20];
int main()
{
query_db();
return 0;
}
void query_db(){
unsigned char j=0,start,end,amount;
char data[20];
buffer_pointer = 0;
while( buffer_pointer < strlen(buffer)){
if(buffer[buffer_pointer] == 10){
if(j==0){
start = buffer_pointer+1;
printf("headstart = %u\n",start);
}
else{
printf("\n%u start = %u\n",j,start);
end = buffer_pointer;
amount = end - start;
strncpy(data, buffer+start,amount);
memcpy(info[j-1],data,strlen(data));//need help in this line
printf("data = %s\n",info[j-1][20]);
memset(data,0,20);
start = end+1;
printf("%u end = %u\n",j,end);
}
j++;
}
buffer_pointer++;
}
}
首选输出:
headstart = 13
1 start = 13
data = Udara
1 end = 18
2 start = 19
data = NO
2 end = 21
3 start = 22
data = +94123456789
3 end = 34
错误输出的问题在于:
printf("data = %s\n",info[j-1][20]);
您可以使用“%s”
格式打印字符串,但是info[j-1][20]
是单个字符。而且这也是不允许的
您可能打算使用info[j-1]
注意,在某些情况下,will not null会终止目标字符串。如果发生这种情况,那么使用strlen(data)
将导致无参数函数的原型:即void query_db()代码>在两个参数之间应有一个void
。否则,编译器将生成可以接受任何数量的参数的代码,这些参数表示原型是<代码>作废查询数据库(作废)代码>编译时,始终启用警告,然后修复这些警告。(对于gcc
,至少使用:-Wall-Wextra-Wconversion-pedantic-std=gnu11
)注意:其他编译器使用不同的选项生成相同的内容取决于在哪个操作系统上运行,此语句:if(buffer[buffer\u pointer]==10){
可能永远不会为“真”建议使用:if(buffer[buffer\u pointer]=='\n'){
关于:而(buffer\u pointer
变量buffer\u pointer
,(实际上是缓冲区的索引,而不是指针)正在比较int
和size\u t
(asize\u t
是一个长无符号int
。你的编译器应该告诉你这个问题,在这里:strncpy(数据,缓冲区+开始,数量);
,它不会在末尾添加空字符。稍微解释一下就可以很好地适应这个“答案”。
memcpy((char *)&info[j-1],data,strlen(data));
memcpy((char *)&info[j-1],data,strlen(data));