如何在 C 中创建一个 "X" 终止的字符串?

How to create a "X" terminated string in C?

我正在尝试创建一个计数器来计算字符串中“?”之前的字符数。我在使用 strcmp 终止 while 循环并以分段错误结束时遇到问题。这是我拥有的:

void printAmount(const char *s)
{
    int i = 0;
    while ( strcmp(&s[i], "?") != 0 ) {
        i++;
    }
    printf("%i", i);
}

不要为此使用 strcmp。直接在s上使用下标运算符即可。

示例:

#include <stdio.h>

void printAmount(const char *s) {
    int i = 0;
    while (s[i] != '?' && s[i] != '[=10=]') {
        i++;
    }
    printf("%d", i);
}

int main() {
    printAmount("Hello?world"); // prints 5
}

或使用strchr

#include <string.h>

void printAmount(const char *s) {
    char *f = strchr(s, '?');
    if (f) {
        printf("%td", f - s);
    }
}

strcmp() 比较字符串,而不是字符。因此,如果您输入类似 "123?456" 的内容,您的逻辑将不起作用,因为 "?" != "?456"。因此,你的 while 循环永远不会终止,你开始使用字符串之外的东西。

void printAmount(const char * s) {
  int i = 0;
  for (; s[i] != '?' && s[i] != '[=10=]'; i++) {
     /* empty */
  }
  if (s[i] == '?') {
    printf("%d",i); // the correct formatting string for integer is %d not %i
  }  
}

除非您有非常奇怪或特殊的要求,否则正确的解决方案是:

#include <string.h>

char* result = strchr(str, '?');
if(result == NULL) { /* error handling */ }

int characters_before = (int)(result - str);