If statement 调用不符合';不存在的条件

If statement 调用不符合';不存在的条件,if-statement,conditional-statements,statements,If Statement,Conditional Statements,Statements,这是不是正确的称呼某个事实上不存在的东西 我使用if语句检查两个条件,但是对于第一次迭代,其中一个被调用的参数不存在。然而,程序运行良好,但它仍然正确吗 该程序采用全名,将首字母缩写转换为大写并打印 int main(void) { string fullname = GetString(); for (int i = 0, n = strlen(fullname); i < n; i++) { if (fullname[i] != ' ' &&am

这是不是正确的称呼某个事实上不存在的东西

我使用if语句检查两个条件,但是对于第一次迭代,其中一个被调用的参数不存在。然而,程序运行良好,但它仍然正确吗

该程序采用全名,将首字母缩写转换为大写并打印

int main(void) {
    string fullname = GetString();
    for (int i = 0, n = strlen(fullname); i < n; i++) {
        if (fullname[i] != ' ' && fullname[i-1] == ' ' ) {
            printf("%c", toupper(fullname[i]));
        }
    }
    printf("\n");
    return 0;
}
int main(无效){
string fullname=GetString();
for(int i=0,n=strlen(全名);i
简短回答:虽然有时运行良好,但它并不正确。

对于
和&
,如果
全名[i]!=“”
为false,compile将不会检查
fullname[i-1]=''
,因为
false&&which
将始终为false。这就是为什么它有时会正确运行的原因。这就是所谓的

但是,您应该避免在实践中编写这样的代码。当
fullname[i]!=''时,它可能会导致错误是真的。然后,它将计算
fullname[i-1]=''
,即
fullname[-1]
,这将在地址错误时触发访问冲突。尝试将
if
-语句更改为以下内容:

if (fullname[i]!=' ' && i>0 && fullname[i-1]==' ') { // make it always right

不,它不正确,可能导致程序崩溃。对于上面的代码,如果全名是,说“Fred”,那么您将检查全名[-1]。充其量,这将包含一个未定义的值-但如果全名恰好位于程序分配内存的边界处,您将在允许的范围之外访问-因此程序崩溃

只能访问您知道已设置的内容。

您就不能试试吗

for (int i = 1, n = strlen(fullname); i < n; i++) {
for(int i=1,n=strlen(全名);i

从偏移量1开始,除非字符串长度为1?

这是什么编程语言?如果您认为有时不存在某些内容,请首先检查是否为Null,并仅在不为Null时继续