c - "Error reading characters of string"C,Visual Studio 2013

标签 c string

我被要求编写一个函数来合并两个排序的(ascii 排序的)字符串而不重复。 例如,对于 string1 = aabcd 和 string2 = abbcdg,最终结果字符串应为 abcdg。 出于某种原因,最终结果字符串没有分配好,或者我认为......它无论如何都不起作用并且它给我奇怪的字符而不是它应该给出的字符。 stringToReturn 的值始终为 0xffffffffe“读取字符串字符错误”,并且在其内部显示“无法读取内存”

主.c:

#include <stdio.h>
#include <stdlib.h>
#include "bohan.h"

int main() {
char* string1;
char* string2;
char* mergedString;
string1 = (char*)malloc(MAX_TEXT + 1);
if (string1 == NULL)
    return;
string2 = (char*)malloc(MAX_TEXT + 1);
if (string2 == NULL)
    return;
printf("Please enter string no. 1: ");
scanf("%s", string1);
printf("Please enter string no. 2: ");
scanf("%s", string2);
mergedString = merge_strings(string1, string2);
printf("%s \n", mergedString);

free(string1);
free(string2);
free(mergedString);
}

bohan.c:

#include <stdio.h>
#include <stdlib.h>
#include "bohan.h"

int checkNumberOfChars(char* text) {
int sum = 0;
if (text == NULL)
    return 0;
while (*text != '\0')
{
    sum++;
    text++;
}
return sum;
}

char* merge_strings(char* text1, char* text2) {
int i;
int hasChanged;
char* stringToReturn;
if (text1 == NULL && text2 == NULL)
    return NULL;
stringToReturn = (char *)malloc(checkNumberOfChars(text1) + checkNumberOfChars(text2) + 1);
if (stringToReturn == NULL)
    return NULL;
for (i = 1; i <= MAX_ASCII; i++) {
    hasChanged = FALSE;
    if (*text1 != '\0' || *text2 != '\0') {
        if (*text1 != '\0') {
            if (i == *text1) {
                *stringToReturn = i;
                stringToReturn++;
                hasChanged = TRUE;
                while (*text1 == i)
                    text1++;
            }
        }
        if (*text2 != '\0') {
            if (i == *text2) {
                if (!hasChanged) {
                *stringToReturn = i;
                stringToReturn++;
                }
                while (*text2 == i)
                    text2++;
            }
        }
    }
    else
        break;
}
return stringToReturn;
}

bohan.h:

#ifndef DEF
#define TRUE 1
#define FALSE 0
#define MAX_TEXT 100
#define MAX_ASCII 255

int checkNumberOfChars(char *text);
char *merge_strings(char *text1, char *text2);

#endif DEF

最佳答案

在 merge_strings 方法中,您必须定义一个指针 (beginOfStringToReturn) 来保存合并字符串的开头地址。 merge_strings 方法应该在最后返回这个指针。在构建合并的字符串后还要添加 '\0'。

char* merge_strings(char* text1, char* text2) {
int i;
int hasChanged;
char* stringToReturn;
if (text1 == NULL && text2 == NULL)
    return NULL;
stringToReturn = (char *)malloc(checkNumberOfChars(text1) + checkNumberOfChars(text2) + 1);
char* beginOfStringToReturn = stringToReturn;
if (stringToReturn == NULL)
    return NULL;
for (i = 1; i <= MAX_ASCII; i++) {
    hasChanged = FALSE;
if (*text1 != '\0' || *text2 != '\0') {
    if (*text1 != '\0') {
        if (i == *text1) {
            *stringToReturn = i;
            stringToReturn++;
            hasChanged = TRUE;
            while (*text1 == i)
                text1++;
        }
    }
    if (*text2 != '\0') {
        if (i == *text2) {
            if (!hasChanged) {
            *stringToReturn = i;
            stringToReturn++;
            }
            while (*text2 == i)
                text2++;
        }
    }
}
else
    break;
}
*stringToReturn = '\0';
return beginOfStringToReturn;
}

在 bohan.h 中包含这样的守卫:

#ifndef BOHAN_H
#define BOHAN_H
#define TRUE 1
#define FALSE 0
#define MAX_TEXT 100
#define MAX_ASCII 255

int checkNumberOfChars(char *text);
char *merge_strings(char *text1, char *text2);

#endif

关于c - "Error reading characters of string"C,Visual Studio 2013,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34045853/

相关文章:

java - 如何创建未知大小的 JDO DataNucleus 键字符串字段?

c# - 分割字符串并将索引之一转换为int

python - Python 3 中字符串中每个句子的大写

c - 宏作为 switch-case 中的一个案例在 c 中不起作用

c - WinAPI中如何让两个线程共享一个全局变量?

c - 如何在字符串前添加减号? (在 C 中)

c - ANSI C : Declare a pointer of type "array of string"

Java:包含关键短语的输出字符串

c - 关于修改 char * 元素的 SIGSEGV

c - CUDA 内核操作中 Atomic 添加的一些问题