0

谷歌搜索,找不到这里出了什么问题,指针正确传递,但它不起作用。

该程序应该找到字符数组/字符串的长度。

这里有什么问题?总是给长度为零!

#include <stdio.h>
#include <stdbool.h>

int stringlength(char *); // Declare function in the beggining (because C)

main()
{
    char testString[100]; // Character array where we'll store input from command line (unsafely)
    char *arrayPointer; // Pointer that will point to array so it can be passed to function
    int length; // Integer for length of string
    printf("Please enter in a string: \n");
    scanf("s", &testString[0]); // Get input
    arrayPointer = &testString[0]; // Point the pointer to the array
    printf("Pointer to array %p\n-----------------\n", arrayPointer); // Output pointer
    stringlength(arrayPointer); // And use the function
    printf("Length is %d\n", length); // Output the length of the string...
}

stringlength(char *stringArray)
{
    int i = 0; // Counter variable
    int length = 0; // Length variable
    bool done = false; // Boolean for loop
    while(!done)
    {
        printf("Character is %c\n", stringArray[i]); // Output character
        printf("Memory location %p\n", &stringArray[i]); // Output memory location of character

        if(stringArray[i] == '\x00') // If the current array slot is a null byte we've reached the end of the array
        {
            done = true; // Null byte found, we're all done here
            return length;
        } else {
            length++; // Not a null byte so increment length!
        }
        i++; // Counter for moving forward in array
    }
}

这个的输出是:

mandatory@MANDATORY:~/Programming/C$ ./a.out
Please enter in a string: 
testing
Pointer to array 0x7fffc83b75b0
-----------------
Character is    
Memory location 0x7fffc83b75b0
Character is 
Memory location 0x7fffc83b75b1
Length is 0
4

2 回答 2

3

你有几个问题:

  1. main应声明返回int

    int main(void)
    
  2. 你的scanf格式不对。采用:

    scanf("%s", &testString[0]);
    
  3. 您实现中的签名stringlength()与原型不匹配。确保它是:

    int stringlength(char *stringArray)
    
  4. stringlength()不返回长度。添加:

    return length;
    

    在该功能的末尾。

  5. 您没有分配给lengthin main()。将调用更改stringlength()为实际使用返回值:

    length = stringlength(arrayPointer);
    
  6. main()应该返回一些东西。大概0。添加:

    return 0;
    

    在结束时main()

于 2013-05-14T19:04:54.203 回答
2

我想你想要

    scanf("s", &testString[0]); // Get input

成为

    scanf("%s", &testString[0]); // Get input
于 2013-05-14T19:02:49.103 回答