- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 C 指针的新手,我正在尝试编写一个类似于高级编程语言的 String.IndexOf() 函数的程序。
基于 String.indexOf function in C ,我已经开始工作了:
int main() {
int index;
char* source = "test string";
char* found = strstr( source, "in" );
if (found != NULL) {
index = found - source;
}
printf("%d\n", index); // prints 8.
return 0;
}
但是当我尝试将其用作函数时,我总是得到 0。(例如,第一个字符串为“Hello World”,然后“World”将打印“0”而不是预期值“6”)。
基本上,stdin 的第一行是“source”(或“haystack”)字符串,接下来的几行将是“needle”。
// includes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// globals
char master[120];
// returns the index of the substring
int substr(char* needle) {
int index;
char* found = strstr( master, needle );
if (found != NULL) {
index = found - needle;
}
printf("%d\n", index);
return index;
}
int main() {
char input[120];
int timesCalled = 0;
while(fgets(input, 120, stdin)) {
timesCalled++;
if (timesCalled == 1) {
strcpy(master, input);
} else {
substr(input);
}
}
if (timesCalled == 0) {
fprintf(stderr, "Master String is empty");
return 1;
}
return 0;
}
这是怎么回事?当它被设置为全局变量时,“master”的指针会改变吗? “input”的指针作为参数传递时是否发生变化?为什么它在程序版本中有效?
欢迎任何意见。
编辑!
我已经将 strcpy(input, master)
行更改为 strcpy(master, input)
并且我仍然得到相同的结果!
最佳答案
问题一
您以错误的顺序将参数传递给 strcpy
。
它需要是:
strcpy(master, input);
第一个参数是目的地,第二个参数是源。
问题2
此外,由于 fgets()
也读取换行符,因此您没有在大海捞针中找到 needle
。在尝试搜索之前,您需要删除换行符。
问题3
您使用了错误的指针来计算 substr
中的索引。
index = found - needle;
需要
index = found - master;
问题4
您需要将index
初始化为某物。否则,当大海捞针中找不到 needle
时,它会返回一个未初始化的值。
int substr(char* needle) {
int index = -1; // Make the return value negative when needle is not found
char* found = strstr( master, needle );
if (found != NULL) {
index = found - master;
}
printf("%d\n", index);
return index;
}
固定程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// globals
char master[120];
// returns the index of the substring
int substr(char* needle) {
int index = -1;
char* found = strstr( master, needle );
if (found != NULL) {
index = found - master;
}
printf("%d\n", index);
return index;
}
void removeNewline(char* input)
{
size_t len = strlen(input);
if ( input[len-1] == '\n' )
{
input[len-1] = '\0';
}
else
{
printf("No newline found\n");
}
}
int main() {
char input[120];
int timesCalled = 0;
while(fgets(input, 120, stdin)) {
removeNewline(input);
timesCalled++;
if (timesCalled == 1) {
strcpy(master, input);
} else {
substr(input);
}
}
if (timesCalled == 0) {
fprintf(stderr, "Master String is empty");
return 1;
}
return 0;
}
输入:
test string
in
es
输出:
8
1
关于c - IndexOf 函数在 C 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39683545/
我想检索字符串列表中的行号(从文件加载)。Indexof 似乎完全匹配。有没有办法检索带有通配符版本的 Indexof 的行?类似于 SL.Indexof('?sometext')? 谢谢! 最佳答案
我已经解析了一些 JSON,但我想获取从 JSON 获得的链接,在链接中找到一个使其不同的标识符(例如 www.foo.com/IDENTIFIER/home),并拥有该标识符作为一个字符串插入到另一
我正在浏览 jQuery 的源代码并碰到这个: return indexOf.call( array, elem ); - Line 683 我想知道这背后的逻辑是什么,为什么不这样做: return
我正在从一个带有空格后的非组合变音符号的字符串中创建一个子字符串。这样做时,我使用 .Contains() 检查字符串。然后执行子串。当我使用空格时 char内部 .IndexOf() ,程序按预期执
我正在使用 Jayway JsonPath 库版本 2.4.0。在 jsonPath 中使用 indexOf 函数,例如。 $.values[?(@.num.indexOf('101') != -1)
由于某种原因,GWT 模拟(客户端)jdk 方法 indexOf() 无法按预期工作。 示例:. 我有一个包含 3 个 NaN 对象的列表: List doubleList = new ArrayLi
Resharper 推荐我使用: int notesFirstSpaceIndex = notes.IndexOf(" ", StringComparison.Ordinal); 代替: int no
我想 String.indexOf(char)比String.indexOf(String)使用单个字符和单个字符串时(例如,'x' & "x") 为了确保我的猜测,我编写了如下简单的测试代码。 pu
我在 IE 8 中的数组顶部使用了 indexOf 方法,但它给出了错误(因为不支持它)。我选择使用 underscore.js 库。我用了_.indexOf(array, value, [isSor
这个问题已经有答案了: No overload for method, takes 0 arguments? (1 个回答) 已关闭 7 年前。 我似乎无法弄清楚为什么我总是收到此错误。 No ove
在 Firefox 和 Opera 上使用 Javascript 调用 indexOf 时出错。在 IE 中工作正常。 错误信息如下: 行动 function anonymous(Grid, Row,
在第一次渲染Use Effect时遇到一个特定的错误,我不确定如何解决。我认为这与该功能的异步性有关,但不确定。项目是一个Reactjs,Firebase,FiRestore Todo应用程序,根据用
在第一次渲染Use Effect时遇到一个特定的错误,我不确定如何解决。我认为这与该功能的异步性有关,但不确定。项目是一个Reactjs,Firebase,FiRestore Todo应用程序,根据用
我需要创建一个对字符串进行排序的函数。字符串中的每个单词都将包含一个数字。数字可以是 1 到 9(不能是 0)。 例如输入:“is2 Thi1s T4est 3a”,函数应返回“Thi1s is2 3
有没有一种方法可以在 Java 中使用 indexOf 在单个解析中查找给定文本中多个字符串的位置? 例如,我想在一次文本解析中为“你”和“ session ”做一个 indexOf“你今天能参加 s
我正在使用以下代码来搜索字符串中的值。 if (myValue.indexOf("Call") > -1) { //dosomething } 我该怎么做和或? (myValue.indexOf("
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
This question already has an answer here: Reference - What does this regex mean? (1 个回答) 1年前关闭。 我必须在
我把它写进了一个 REPL: case class Thingy(s: String) val things = List(Thingy("x"), Thingy("y")) things.index
在带有此查询的 JMESPath 中: people[].{"index":@.index,"name":name, "state":state.name} 在此示例数据上: { "people"
我是一名优秀的程序员,十分优秀!