c - 通过函数输出操作数组时出现 C 错误
问题描述
好吧,我编写了这个简单的程序,它从一个 char 数组和一个关键字,将字符串中以该关键字开头的部分存储在另一个数组中。
如果我不使用任何函数来操作数组,它就可以工作,但我不明白为什么它在通过函数操作时不起作用,在这种情况下 printf 没有输出。
不起作用的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void createRequest(char *buffer) {
strcat(buffer, "GET /vfolder.ghp HTTP/1.1\r\n");
strcat(buffer, "User-Agent: Mozilla/4.0\r\n");
strcat(buffer, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");
strcat(buffer, "Conection: Keep-Alive\r\n\r\n");
strcat(buffer, "name=2&password=3");
}
void getParameters(char *buffer, char *parameters) {
for (int i = 0; i < sizeof(buffer); i++) {
if (strncmp(buffer + i, "name=", 5) == 0) { strcpy(parameters, buffer + i); }
}
}
int main(int argc, char *argv[]) {
char buffer[250];
char parameters[250];
memset(buffer, 0x00, sizeof(buffer));
memset(parameters, 0x00, sizeof(parameters));
createRequest(buffer);
fprintf(stdout, "Your buffer is: \n%s\r\n", buffer);
getParameters(buffer, parameters);
printf("The parameters are: \n%s\r\n", parameters);
}
有效的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void createRequest(char *buffer) {
strcat(buffer, "GET /vfolder.ghp HTTP/1.1\r\n");
strcat(buffer, "User-Agent: Mozilla/4.0\r\n");
strcat(buffer, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");
strcat(buffer, "Conection: Keep-Alive\r\n\r\n");
strcat(buffer, "name=2&password=3");
}
int main(int argc, char *argv[]) {
char buffer[250];
char parameters[250];
memset(buffer, 0x00, sizeof(buffer));
memset(parameters, 0x00, sizeof(parameters));
createRequest(buffer);
fprintf(stdout, "Your buffer is: \n%s\r\n", buffer);
for (int i = 0; i < sizeof(buffer); i++) {
if (strncmp(buffer + i, "name=", 5) == 0) { strcpy(parameters, buffer + i); }
}
printf("The parameters are: \n%s\r\n", parameters);
}
解决方案
你不应该sizeof
在getParameters
函数中使用。
此操作的值为sizeof(char*)
,这不是您的意思。
更改它并strlen
改用:
void getParameters(char *buffer, char *parameters) {
for (int i = 0; i < strlen(buffer); i++) {
if (strncmp(buffer + i, "name=", 5) == 0) { strcpy(parameters, buffer + i); }
}
}
基本上,因为它是一个char*
(它是空终止的),你可以使用strlen
它来找到它的长度。例如,对于整数数组,您必须将元素的数量作为额外参数传递。
推荐阅读
- jquery - 如果我使用 jquery-upload-file,如何增加拖放文件的 div 高度
- c++ - VertexBuffer 在尝试对其进行抽象时出错
- angular - 动态字头角度
- python - 这样做时可以复制 s3 文件并更改其 zip 格式吗?
- django - 添加handler404后找不到Django根路径
- android - ShapeableImageView 有黑色背景,不圆角
- android - 为什么 BluetoothSocket.getMaxReceivePacketSize() 和 BluetoothSocket.getMaxTransmitPacketSize() 返回 0?
- python - 使用 BeautifulSoup 抓取的数据与源代码不匹配
- css - CSS - 如何使用渐变颜色制作锥形
- swift - 视图的消失动画不会与容器一起移动